【问题标题】:How to resign keyboard automatically如何自动退出键盘
【发布时间】:2025-11-21 10:25:13
【问题描述】:

我正在使用IQKeyboardManager。在我的 UI 中,我有一个 textview,在它下面有一个 textfield。现在,当我点击 textview 时,键盘会出现。

当我点击文本视图下方的文本字段时,我会调出一个日期选择器。但是当我点击 textview 时出现的键盘仍然存在,因为我没有按下键盘上的 Done 按钮。

如果我点击我的文本字段,如何在点击文本视图时自动关闭出现的键盘,而无需按下Done 按钮..?

我试过这些,但没有用......

func textViewShouldEndEditing(_ textView: UITextView) -> Bool {
        print("called")
        myTextView.resignFirstResponder()
        return false
    }
    
    func textFieldDidBeginEditing(_ textField: UITextField) {
        print("called")
    }
    

【问题讨论】:

    标签: ios swift keyboard-events iqkeyboardmanager


    【解决方案1】:

    确保您分配了textField.delegate = self

    然后,如果您想在点击文本字段时关闭键盘,请更正您的 textFieldDidBeginEditing 方法:

    func textFieldDidBeginEditing(_ textField: UITextField) {
        myTextView.resignFirstResponder()
        textField.resignFirstResponder()
    }
    

    【讨论】:

      【解决方案2】:
      func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
          if textField == yourTextFieldName {
              //You need to Resign both responders here.
              yourTextView.resignFirstResponder()
              yourTextFieldName.resignFirstResponder()
              //show your date picker
              return false
          } else {
              return true
          }
      }
      

      两种方法的区别。

      一个“shouldBegin”的东西可以让你对返回值说NO来禁止这个动作。

      “didBegin”表示它刚刚开始发生,你需要在那个时间点采取任何你需要做的行动。

      【讨论】: