I have a TextEditor that I do not let users add New Line (\n) in it. That is to say, when a user Enter, I dismiss the keyboard. I have used the following code to dismiss the keybaord and prevents users from adding a new line.
The keyboard is dismissed on Enter, but it does not prevent users from adding a new line. When you Enter.
extension View {
func dismissKeyboard(){
let keyWindow = UIApplication.shared.connectedScenes
.filter({$0.activationState == .foregroundActive})
.map({$0 as? UIWindowScene})
.compactMap({$0})
.first?.windows
.filter({$0.isKeyWindow}).first
keyWindow?.endEditing(true)
}
}
struct Editor: View {
@Binding var text: String
var onEditingEnded: () -> ()
var body: some View {
ZStack(alignment: .leading) {
TextEditor(text: $text)
.onChange(of: text) { value in
if value.last == "\n" {
self.dismissKeyboard()
self.onEditingEnded()
}
}
}
.padding(8)
.font(.body)
}
}
How to prevent users from adding a new line?