我正在使用SecureField构建一个登录页面。然而,我注意到没有onEditingChanged,所以我们不能知道它是否已经成为第一响应者。有什么解决方案可以监控这个事件吗?
发布于 2020-07-17 20:20:10
您可以创建一个包含secureText值的变量的模型类(在您的示例中,它应该是LoginModel或类似的值)。然后将值绑定到secureField文本,并在模型中发布的变量上添加didSet。下面是一个示例:
型号:
class SecureFieldModel: ObservableObject {
@Published var secureText = "" {
didSet {
print(secureText)
}
}
}查看:
@ObservedObject var model = SecureFieldModel()
struct LoginView: View {
var body: some View {
SecureField("Type your text here", text: $model.secureText)
}
}发布于 2020-07-17 23:44:46
我想你可能误解了我的问题。如果文本字段只是焦点,还没有文本,我们就无法获取事件。-3小时前的RayChen
曼达斯的回答略有修改。当输入的文本有内容或处于活动状态时“触发”:
struct ContentView: View {
@ObservedObject var model = SecureFieldModel()
var body: some View {
// No info when focus removed
SecureField("Type your text here", text: $model.secureText)
.onTapGesture { // when active
self.model.textFieldActivated()
}
// Do something when focus removed
SecureField("Type your text here", text: $model.secureText, onCommit: {print("Commited and focus removed")})
.onTapGesture { // when active
self.model.textFieldActivated()
}
}
}
class SecureFieldModel: ObservableObject {
@Published var secureText = "" {
didSet {
// if text
if secureText.count >= 1 {
print(secureText)
}
}
}
func textFieldActivated() {
if secureText.count >= 1 {
print(secureText)
} else {
print("is active")
}
}
}https://stackoverflow.com/questions/62952143
复制相似问题