You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的替代方案,满足以下两个核心要求:
    1. 按下Return键时键盘不收起;
    2. 能可靠检测到Return按键的触发。

内容的提问来源于stack exchange,提问作者Barrrdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 19:12:08