点击文本字段后如何立即隐藏键盘?

how to hide keyboard immediately after tapping on a text field?

我有一个自定义文本字段。当用户点击它时,它使用 UITableViewController 打开一个弹出窗口。

我想阻止键盘弹出我的文本字段,看起来不可能。

所以我尝试了以下在模拟器中工作的代码,但是它不适用于实际的iPhone!!!

    @IBAction func provincePressed(_ sender: Any) {
         (sender as AnyObject).resignFirstResponder()
         self.view.endEditing(true)

怎么了?以及如何让它适用于实际的 iPhone?或者可能根本不显示键盘!

尝试在 textFieldShouldBeginEditing 方法中 return false

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
  return false
}

Swift 4

您可以像这样在 textFieldDidBeginEditing 方法中调用 textField.resignFirstResponder()

-(void)textFieldDidBeginEditing:(UITextField *)textField {     
    if (textField.tag == 1) {
        //this is textfield 2, so call your method here
       textField.resignFirstResponder()
    }
}

你应该给想要的文本字段一个标签。如果您希望 ViewContriler 中的所有文本字段具有相同的行为,则不需要该部分。

此外,不要忘记从 UITextFieldDelegate 扩展您的 ViewController 并将 textField 委托给您的 ViewController 。

textField.delegate = self

预先将文本字段的 isEnabled 设置为 false

这是根据 SafoineMoncefAmine 的回答。

-(void)textFieldDidBeginEditing:(UITextField *)textField {     
    if (textField == yourTextfield) {// No need tag Use QA Manager to handle the textfield

       textField.resignFirstResponder()
       // Open your menu here, add view, show the menu here.

    }
}

除了这个答案,

extension MyViewController: UITextFieldDelegate {
    func textField(_ textField: UITextField,
                   shouldChangeCharactersIn range: NSRange,
                   replacementString string: String) -> Bool {
        if textField == YourTextField{
        return false
        }
        else{
        return true
        }
    }
}

您可以只禁用来自 UITextField 的用户交互,并用 UIView 覆盖它并将 uigesturerecognizer 添加到该视图以触发您的事件。