首页 > 解决方案 > SwiftUI 中的 textFieldDidBeginEditing 和 textFieldDidEndEditing

问题描述

我如何使用这些方法textFieldDidBeginEditing以及textFieldDidEndEditing苹果的默认 TextField 结构。

标签: iosswiftswiftui

解决方案


TextFieldonEditingChangedonCommit回调。

例如:

@State var text = ""
@State var text2 = "default"
var body: some View {
    VStack {
        TextField($text, placeholder: nil, onEditingChanged: { (changed) in
            self.text2 = "Editing Changed"
        }) {
            self.text2 = "Editing Commited"
        }
        Text(text2)
    }
}

中的代码onEditingChanged仅在用户选择时调用textField,并且onCommit仅在点击返回、完成等时调用。

编辑:当用户从一个更改TextField为另一个时,先前选择TextField的 'sonEditingChanged被调用一次,changed(参数) equaling false,并且刚刚选择TextField的 'sonEditingChanged也被调用,但参数 equaling true不会为先前选择的onCommit调用回调。TextField

编辑2: 添加一个示例,如果您想committed()在用户点击 return 或 changes 时调用函数TextField,以及changed()当用户点击 时TextField

@State var text = ""
var body: some View {
    VStack {
        TextField($text, placeholder: nil, onEditingChanged: { (changed) in
           if changed {
               self.changed()
           } else {
               self.committed()
           }
        }) {
            self.committed()
        }
    }
}

推荐阅读