📅  最后修改于: 2023-12-03 14:53:13.649000             🧑  作者: Mango
在 SwiftUI 中,我们可以使用 @State
属性包装器来创建可变状态,以在视图中显示变化。但如果我们想在文本字段更改时执行某些操作,该怎么办呢?
onEditingChanged
TextField
提供了一个 onEditingChanged
回调,用于在当前列表的编辑状态发生更改时执行操作。我们可以使用这个回调来检测文本字段何时被编辑,然后执行相应的操作。
例如,让我们假设我们想要在文本字段编辑时验证用户输入。我们可以编写以下代码:
struct ContentView: View {
@State private var username = ""
@State private var isEditing = false
var body: some View {
TextField("Enter your name", text: $username, onEditingChanged: { isEditing in
self.isEditing = isEditing
if !isEditing {
// Perform validation logic here
}
})
}
}
在这个示例中,我们创建了一个 TextField
,用于输入用户名。我们使用 @State
来包装 username
属性,以便我们可以在视图中显示其值的更改。我们使用 onEditingChanged
回调来检测视图的编辑状态,并将其保存在 isEditing
属性中。然后,如果编辑状态改变为 false
(即编辑完成),我们可以在回调中执行验证逻辑。
另一种方法是通过使用绑定对象来监视文本更改。我们可以创建一个绑定对象,然后在 TextField
中使用它作为绑定属性的值。当用户更改文本字段时,绑定的对象将自动更新。我们可以使用 didSet
块来检测绑定对象的更改,并执行相应的操作。
例如,让我们假设我们想要在文本字段更改时记录其值。我们可以编写以下代码:
class TextFieldData: ObservableObject {
var value: String = "" {
didSet {
// Perform some action here
print("Text field value changed to \(value)")
}
}
}
struct ContentView: View {
@StateObject var textFieldData = TextFieldData()
var body: some View {
TextField("Enter some text", text: $textFieldData.value)
}
}
在这个示例中,我们创建了一个名为 TextFieldData
的可观察对象,并在其中定义了一个字符串属性 value
。我们使用 didSet
块来检测 value
更改,并在控制台中记录新值。然后,我们在视图中使用 TextField
,并将 textFieldData.value
作为其绑定属性的值。
有多种方法可以在 SwiftUI 中检测文本字段的更改。您可以使用 onEditingChanged
回调来监视编辑状态,或使用绑定对象来监视绑定属性的更改。根据您的应用程序需求,您可以选择其中一种方法或组合多种方法来实现所需的功能。