TextField
имеет onEditingChanged
и onCommit
обратных вызовов.
Например:
@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
вызывается только тогда, когда нажаты return, done и т. Д.
Редактировать: Когда пользователь переключается с одного TextField
на другой, ранее выбранный TextField
onEditingChanged
вызывается один раз, при этом changed
(параметр) равен false
и также вызывается только что выбранный TextField
onEditingChanged
, но с параметром, равным true
. Обратный вызов onCommit
- , а не , вызываемый для ранее выбранного TextField
.
Редактировать 2:
Добавление примера, если вы хотите вызвать функцию committed()
, когда пользователь нажимает, вернуть или изменить 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()
}
}
}