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

SwiftUI中点击TextField时如何禁止屏幕键盘自动弹出?

SwiftUI TextField禁止屏幕键盘弹出实现方案

你可以根据项目支持的系统版本选择对应的实现方式:

方案1:全系统版本兼容方案

通过封装底层UITextField,设置空inputView从根源阻止键盘弹出,支持iOS13及以上版本。

步骤1:定义无键盘TextField组件

import SwiftUI

struct NoKeyboardTextField: UIViewRepresentable {
    let placeholder: String
    @Binding var text: String
    let font: UIFont?
    
    func makeUIView(context: Context) -> UITextField {
        let textField = UITextField()
        textField.placeholder = placeholder
        textField.text = text
        textField.font = font
        // 核心配置:设置空输入视图,不会触发键盘弹出
        textField.inputView = UIView()
        // 可选配置:如果不需要显示光标,取消下一行注释
        // textField.tintColor = .clear
        textField.addTarget(context.coordinator, action: #selector(Coordinator.updateText), for: .editingChanged)
        return textField
    }
    
    func updateUIView(_ uiView: UITextField, context: Context) {
        uiView.text = text
        uiView.font = font
    }
    
    func makeCoordinator() -> Coordinator {
        Coordinator(text: $text)
    }
    
    class Coordinator: NSObject {
        @Binding var text: String
        init(text: Binding<String>) {
            self._text = text
        }
        
        @objc func updateText(_ sender: UITextField) {
            text = sender.text ?? ""
        }
    }
}

步骤2:替换原有代码

NoKeyboardTextField(
    placeholder: "Input Amount",
    text: $inputAmount,
    font: .systemFont(ofSize: 34, weight: .regular) // 对应SwiftUI的.largeTitle字号
)

方案2:iOS16+极简方案

如果项目最低支持iOS16,直接使用系统原生修饰符即可,无需自定义组件:

TextField("Input Amount", text: $inputAmount)
    .font(.largeTitle)
    .textFieldInputView(EmptyView())
    // 可选:不需要光标可加下面一行
    // .tint(.clear)

注意事项

  • 两种方案都保留了TextField的选中、复制粘贴、文本绑定能力,适合需要通过自定义按键、扫码等外部方式输入内容的场景
  • 如果需要完全禁止TextField的编辑能力,可以额外加上.disabled(true)修饰符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:06:02