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

SwiftUI(Xcode11)开发BMI计算器时如何收起数字键盘?

解决SwiftUI(Xcode 11)中数字键盘无法收起的问题

嘿,我之前在SwiftUI入门阶段也碰到过一模一样的键盘收不起来的问题,尤其是在Xcode 11的环境下,给你几个亲测有效的解决思路:

  • 点击空白区域自动收起键盘
    可以给你的主视图添加一个自定义手势修饰符,实现点击空白处收键盘的功能。先写一个View的扩展:

    extension View {
        func dismissKeyboardOnTap() -> some View {
            self.onTapGesture {
                UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
            }
        }
    }
    

    然后在你的根视图上加上这个修饰符:

    var body: some View {
        VStack {
            // 你的TextField、计算按钮等界面内容
        }
        .dismissKeyboardOnTap()
    }
    

    这样用户点击界面上除键盘外的任意区域,键盘就会自动收起,就能顺利点击计算按钮了。

  • 点击计算按钮时主动收起键盘
    直接在计算按钮的点击事件里先执行收键盘的逻辑,再处理计算:

    Button("计算BMI") {
        // 先收起键盘
        UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
        // 再执行BMI计算逻辑
        calculateBMI()
    }
    
  • 用状态变量控制TextField焦点
    借助SwiftUI的状态驱动理念,通过切换TextField的焦点状态来收起键盘。首先定义一个状态变量:

    @State private var isTextFieldFocused = false
    

    给TextField绑定焦点状态:

    TextField("输入体重", text: $weight)
        .focused($isTextFieldFocused)
    

    最后在计算按钮的点击事件里关闭焦点:

    Button("计算BMI") {
        isTextFieldFocused = false
        calculateBMI()
    }
    

    Xcode 11对应的iOS 13已经支持focused修饰符,放心用就好。

如果这些方法还是没解决问题,你可以把TextField和计算按钮相关的代码片段贴出来,这样能更精准地帮你定位问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:44:06