【问题标题】:Swift - How to dismiss number keyboard after tapping outside of the textfieldSwift - 如何在文本字段之外点击后关闭数字键盘
【发布时间】:2015-01-10 16:59:51
【问题描述】:

在键盘外点击时如何从 UITextField 中关闭键盘。我试过resignFirstResponder(),它只在输入一个数字后退出。我也试过textField.inputView = UIView.frame(frame: CGRectZero)。我已经看到了很多我所要求的 Obj-C 版本,但我需要 Swift 等价物,因为我没有 Objective-C 的编程经验

感谢您的时间和耐心。

【问题讨论】:

标签: ios xcode swift


【解决方案1】:

向视图添加轻击手势识别器并调用 resignFirstResponder() 或 self.view.endEditing(true) 的最佳方法。我更喜欢 endEditing() 因为 resignFirstResponder 必须分别为每个文本字段完成,这与为视图本身完成的 endEditing 不同。

在 viewDidLoad 中,编写如下代码:

let tapRecognizer = UITapGestureRecognizer()
tapRecognizer.addTarget(self, action: "didTapView")
self.view.addGestureRecognizer(tapRecognizer)

现在编写 didTapView 方法来关闭键盘:

func didTapView(){
  self.view.endEditing(true)
}

现在,当您在控制器的主视图上点击键盘外部时,它将调用 didTapView 方法并关闭键盘。

Swift 3.x

viewDidLoad 中的代码应该是:

let tapRecognizer = UITapGestureRecognizer()
tapRecognizer.addTarget(self, action: #selector(ViewController.didTapView))
self.view.addGestureRecognizer(tapRecognizer)

其中 ViewController 应该是您的视图控制器的名称。

谢谢

【讨论】:

  • didTapView 函数放在哪里
  • 只需在您拥有的同一个视图控制器类中添加 func。
  • Swift 3 要求我添加一个选择器,如下tapRecognizer.addTarget(self, action: #selector(MyViewController.didTapView))
  • 还添加了 Swift 3 语法。谢谢@ChristyHerron
【解决方案2】:

Swift 3 经过测试并可以正常工作

 // dismiss keyboard on touch outside textfield
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        for txt in self.view.subviews {
            if txt.isKind(of: UITextField.self) && txt.isFirstResponder {
                txt.resignFirstResponder()
            }
        }
    }   

享受

Swift 2.3 经过测试并可以正常工作

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        for txt in self.view.subviews {
            if txt.isKindOfClass(UITextField.self) && txt.isFirstResponder() {
                txt.resignFirstResponder()
            }
        }
    }

享受

【讨论】:

    【解决方案3】:

    您也可以使用此方法在按下“Return”时关闭键盘

    func textFieldShouldReturn(textField: UITextField!) -> Bool {
            self.view.endEditing(true);
            return false;
    }
    

    确保设置您的委托

    【讨论】:

      【解决方案4】:

      如果您不想定义额外的方法,还有一种稍微简单的方法也可以使用

      let tapRecognizer = UITapGestureRecognizer(target: self, action: "endEditing:")
      view.addGestureRecognizer(tapRecognizer)
      

      【讨论】:

      • 使用这个我得到错误,use of string literal for Objective-C seletors is deprecated; use '#selector' instead。如果我找到解决方案,我会发布。
      • endEditing:无法识别的选择器发送到实例
      【解决方案5】:

      我在一个网站上找到了这段代码,它对我很有用!

      //FUNCTION TO DISMISS THE KEYBOARD
       func initializeHideKeyboard(){
       //Declare a Tap Gesture Recognizer which will trigger our dismissMyKeyboard() function
       let tap: UITapGestureRecognizer = UITapGestureRecognizer(
       target: self,
       action: #selector(dismissMyKeyboard))
       //Add this tap gesture recognizer to the parent view
       view.addGestureRecognizer(tap)
       }
      
       @objc func dismissMyKeyboard(){
       //endEditing causes the view (or one of its embedded text fields) to resign the first responder status.
       //In short- Dismiss the active keyboard.
       view.endEditing(true)
       }
      

      然后只需在按钮操作或类似操作中调用此函数:

      dismissMyKeyboard()
      

      【讨论】:

        猜你喜欢
        • 2021-03-24
        • 2017-08-14
        • 1970-01-01
        • 2015-09-28
        • 1970-01-01
        • 2023-03-22
        • 2017-05-13
        • 2013-06-27
        • 2018-12-31
        相关资源
        最近更新 更多