【问题标题】:Disable UITextField keyboard?禁用 UITextField 键盘?
【发布时间】:2026-02-04 19:10:02
【问题描述】:

我在我的应用程序中放置了一个数字键盘,用于将数字输入到文本视图中,但为了输入数字,我必须单击文本视图。一旦我这样做,常规键盘就会出现,这是我不想要的。

如何完全禁用键盘?非常感谢任何帮助。

【问题讨论】:

    标签: iphone cocoa-touch uitextfield iphone-softkeyboard


    【解决方案1】:

    UITextField 的 inputView 属性默认为 nil,即显示标准键盘。

    如果您为其分配自定义输入视图,或者只是一个虚拟视图,则键盘不会出现,但闪烁的光标仍会出现:

    UIView* dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];    
    myTextField.inputView = dummyView; // Hide keyboard, but show blinking cursor
    

    如果您想同时隐藏键盘和闪烁的光标,请使用以下方法:

    -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
        return NO;  // Hide both keyboard and blinking cursor.
    }
    

    【讨论】:

    • Caleb 在下面的回答解释了这一点,但我想补充一点,任何UIView 都可以设置为inputView。这将导致视图以与标准键盘相同的方式进行动画输入和动画输出。
    • 这在开发自定义键盘应用程序扩展时很有用。如果您在自定义键盘中包含 UISearchBar 或 UITextField,它将尝试显示键盘(尽管它在键盘中),这意味着它将杀死您当前的键盘作为其视图/控制器层次结构,然后重新创建它。我在这个老派黑客的帮助下解决了这个问题。谢谢!
    • 最后我使用了外观代理的更简洁的方法,但依赖于相同的概念:[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setInputView:[UIView new]];
    • 这可行,但如果您使用 Mac 键盘在 UITextfield 中写入,应用程序会崩溃。这不是一个好的解决方案。
    【解决方案2】:

    对于 Swift 2.x、3.x、4.x、5.x

    textField.inputView = UIView()
    

    成功了

    【讨论】:

    • Martin 和 Satish 又做到了 ??
    • 您可以使用textField.inputAccessoryView = UIView() 隐藏附件视图,也可以使用textField.tintColor = .white 隐藏光标(Swift 5.x)。
    • OutStanding 为我工作......
    【解决方案3】:

    如果是 UITextField,可以将其 enabled 属性设置为 NO。

    如果是 UITextView,你可以在它的委托中实现-textViewShouldBeginEditing: 来返回 NO,这样它就永远不会开始编辑。或者您可以将其子类化并覆盖 -canBecomeFirstResponder 以返回 NO。或者您可以利用它的编辑行为并将数字按钮放入一个视图中,用作文本视图的inputView。这应该会导致在编辑文本视图时显示按钮。这可能是也可能不是你想要的。

    【讨论】:

    • 顺便说一句,它是一个文本字段。这就是我如何让按钮写入特定的文本字段,设置标志并调用 if (current.tag == 10) { textfieldflag = 1; [loanAmount setUserInteractionEnabled:NO]; [期间 setUserInteractionEnabled:YES]; [兴趣 setUserInteractionEnabled:YES]; //[存款setUserInteractionEnabled:YES];贷款金额.editable = 否; }
    • 哇,开始工作了。谢谢你,这么简单的事情,谷歌没有答案。
    【解决方案4】:

    根据您现有按钮的工作方式,这可能会破坏它们,但您可以阻止键盘显示,将 textView 的可编辑属性设置为 NO

    myTextView.editable = NO
    

    【讨论】:

    • 他要求的是 UITextField,而不是 UITextView
    【解决方案5】:

    当在同一个视图上有 2 个文本字段时,我遇到了同样的问题。我的目的是为一个文本字段显示一个默认键盘并隐藏第二个并显示一个下拉列表。

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
    

    方法根本没有像我预期的那样对 2 个文本字段起作用,我发现的唯一解决方法是

        UIView* dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];    
        myTextField.inputView = dummyView; 
        myTextField.inputAccessoryView = dummyView; 
        myTextField.tintColor =  myTextField.backgroundColor; //to hide a blinking cursor
    

    这将完全隐藏目标文本字段的键盘(在我的情况下为 DropDownList),并在用户切换到第二个文本字段时显示默认键盘(帐号截图)

    【讨论】:

    • 你的回答真的很棒!因为它有将 inputAccessoryView 设置为 dummyView 的解决方案。我正在苦苦挣扎-如何将其从屏幕底部隐藏。
    【解决方案6】:

    禁用 UITextField 键盘:

    1. 转到 Main.Storyboard
    2. 点击UITextField将其选中
    3. 显示 属性检查器
    4. 取消选中启用用户交互

    禁用 UITextView 键盘:

    1. 转到 Main.Storyboard
    2. 点击UITextView将其选中
    3. 显示 属性检查器
    4. 取消选中可编辑行为

    【讨论】:

    • 如果你这样做,这个文本字段将是不可触摸的。所以你不能点击和写任何东西。
    【解决方案7】:

    有一个简单的破解方法。放置一个空按钮 (无文本)在键盘上方并有一个动作事件分配给它。这将停止键盘出现,您可以在按钮单击的句柄中执行您想要的任何操作

    【讨论】:

      【解决方案8】:

      我使用了keyboardWillShow NotificationtextField.endEditing(true)

      lazy var myTextField: UITextField = {
          let textField = UITextField()
          // ....
          return textField
      }()
      
      override func viewDidLoad() {
          super.viewDidLoad()
      
          NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
      }
      
      @objc func keyboardWillShow(_ notification: Notification) {
              
          myTextField.endEditing(true)
      
          // if using a textView >>> myTextView.endEditing(true) <<<
      }
      

      【讨论】:

        【解决方案9】:
        private void TxtExpiry_EditingDidBegin(object sender, EventArgs e)
            {
                ((UITextField)sender).ResignFirstResponder();
            }
        

        在 C# 中这对我有用,我不使用情节提要。

        【讨论】:

          【解决方案10】:

          在 Xcode 8.2 中,您可以通过取消选中状态“启用”选项轻松完成。

          1. 点击您希望不可编辑的文本字段
          2. 前往右侧的服装检查员
          3. 取消选中状态的“启用”

          或者,如果您想通过代码来实现。您可以简单地创建此文本字段的 @IBOutlet,为其命名,然后在 viewDidLoad 函数(或任何自定义函数,如果您愿意)中使用此变量名称,如下所示(在 swift 3.0.1 中):

          override func viewDidLoad() {
              super.viewDidLoad()
          
              // Do any additional setup after loading the view.
          
              myTextField.isEditable = false
          }
          

          【讨论】:

          • isEditable 不存在
          最近更新 更多