我是UIKit的SwiftUI新手,我有一个关于TextField行为的问题。
struct ContentView: View {
@State private var text = ""
@State private var words: [String] = []
var body: some View {
Form {
Section {
TextField("Input", text: $text) {
words.insert(text, at: 0)
text = ""
}
}
Section {
Button("Clear") {
text = ""
}
}
Section {
ForEach(words, id: \.self) { word in
Text(word)
}
}
}
}
}
我想做的行为是清除文本并将其添加到列表中。输入后,文本字段将被清除。现在的问题是调用了text = ""
,但它没有清理字段。但是,通过在下面有一个单独的按钮,它可以正常工作。
对于上下文,我需要将最低部署版本设置为iOS14,并且我使用的是Xcode 14。0.1.
我试着把它移到一个功能,但也没有帮助。
4条答案
按热度按时间pgvzfuti1#
在
text = ""
之前的清除按钮中,只需在数组中添加xcitsw882#
对于iOS 14,可以通过UITextField的
UIViewRepresentable
和Coordinator
类来管理文本字段委托。下面是相同的工作代码。
******在iOS 15***及以上版本***中,可以通过TextField的
onCommit
方法进行管理lf5gs5x23#
onCommit在onEditingChanged之前触发,可能这就是为什么会有竞争问题。与onCommit不同,onSubmit在onEditingChanged之后触发。当需要更改绑定值时,它可以很好地工作
jaql4c8m4#
下面的代码适合我。