根据苹果官方开发人员文档,init(_:text:onEditingChanged:onCommit:)for aTextField现已弃用: https: //developer.apple.com/documentation/swiftui/textfield/init(_ :text:oneditingchanged:oncommit:)-6lnin
到目前为止我仍然可以使用:
TextField("placeholder", text: $text, onEditingChanged: { _ in print("focus changed") })
Run Code Online (Sandbox Code Playgroud)
但我不明白如何按照开发人员文档中的建议将其替换onEditingChanged为新的。FocusState有任何提示如何执行此操作吗?
是的,您可以通过观察块中焦点状态的变化来做到这一点onChange。该块将传递新的焦点状态,并且您可以使用捕获列表来捕获旧状态。例如,如果您想知道用户何时完成编辑字段以便您可以执行验证,您可以这样做:
struct URLForm: View {
enum Field {
case name, url
}
@FocusState private var focus: Field?
@State private var name: String
@State private var urlPath: String
var body: some View {
TextField("Name", text: $name)
.focused($focus, equals: .name)
.onChange(of: focus) { [oldFocus = focus] newFocus in
guard oldFocus == .name, newFocus != .name else { return }
// user has finished editing this field
}
TextField("URL", text: $urlPath)
.focused($focus, equals: .url)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1414 次 |
| 最近记录: |