Я работаю со SwiftUI уже неделю, и, как и все, я изо всех сил пытаюсь определить, является ли что-то, что не работает, ошибкой или недоразумением с моей стороны.
Я использую представление TextField, но закрытие onCommit никогда не выполняется. onEditingChanged работает нормально. Он вызывается с true, когда текстовое поле получает фокус, и вызывается с false, когда теряет его.
Однако закрытие onCommit никогда не будет выполнено. Согласно небольшой документации, которая доступна в коде:
onCommit : действие, которое выполняется, когда пользователь выполняет действие
(обычно клавиша возврата), в то время как TextField
имеет фокус.
Это код:
TextField($value,
placeholder: Text(placeholder),
onEditingChanged: { edit in
print("edit = \(edit)")
},
onCommit: {
print("COMITTED!")
}).textFieldStyle(.roundedBorder).padding(.horizontal, 20)
В идеале я хотел бы переместить фокус из текстового поля, получающего клавишу RETURN, и поместить фокус в следующее поле. Это легко сделать с помощью UITextField и resignFirstResponder () и intoFirstResponder ().
Мне уже удалось использовать UIViewRepresentable
для встраивания старого UITextField, но суть этого поста не в этом. Я действительно надеюсь, что он будет работать в чистом коде SwiftUI.
Если я когда-нибудь смогу заставить работать onCommit, что я должен поставить туда, чтобы достичь своей цели?
Обновление : Похоже, проблема присутствует только в iOS, а не в macOS, где она работает нормально.
Обновление 2 : это видео о результате выполнения предложенного кода на моей машине. Я подал ошибку в Apple ... посмотрим.