SwiftUI中TextField按Return不收起键盘且检测按键的实现方案
SwiftUI实现Reminders.app风格TextField交互的问题
需求
- 实现类似Reminders.app的交互逻辑:输入条目后按下Return键,立即添加新条目并保持键盘弹出;仅当输入框为空时按下Return键,才收起键盘。
现有问题与尝试
- 最初使用
@FocusState实现时,出现键盘弹跳的问题。 - 尝试通过introspect框架保持键盘弹出,核心代码如下:
自定义TextField代理类
class TextFieldKeyboardBehavior: UIView, UITextFieldDelegate { func textFieldShouldReturn(_ textField: UITextField) -> Bool { return false } }
测试视图代码
struct TestView: View { @State var text: String = "" var textFieldKeyboardBehavior = TextFieldKeyboardBehavior() var body: some View { VStack { TextField("Title", text: $text) .introspect(.textField, on: .iOS(.v17)) { $0.delegate = textFieldKeyboardBehavior } .onSubmit { // 此处代码永远不会触发 } } } }
- 该方案的问题:
onSubmit回调永远不会被触发。若改用onChange修饰符,会在每次按键时触发,无法可靠判断何时应该收起键盘。已知这是因为禁用了Return键的默认行为,但希望找到基于introspect和TextField的替代方案,满足以下两个核心要求:- 按下Return键时键盘不收起;
- 能可靠检测到Return按键的触发。
内容的提问来源于stack exchange,提问作者Barrrdi
相关产品推荐
相关产品推荐

