代码之家  ›  专栏  ›  技术社区  ›  Yi Li

在iOS中关闭键盘

  •  5
  • Yi Li  · 技术社区  · 7 年前

    我查看并尝试了Swift 3、Xcode 8的多种解决方案,但都没有成功。我试过:

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)         
    }
    

    并将文本字段输入设置为第一响应器:

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {            
        pressureInput.resignFirstResponder()
    }
    

    我不知道Xcode 8到Xcode 9中是否有导致这些方法不起作用的东西,或者我是否在其他地方弄糟了。我有9个文本字段,它们都将delegate设置为self。按return键时,它们的标记会递增,以转到下一个文本字段。不要认为这会影响它。对不起,这是新手!代码可以与这些尝试的函数中的任何一个一起运行,但它们仍然存在。我只想在触摸任何文本字段之外时关闭键盘。

    5 回复  |  直到 7 年前
        1
  •  22
  •   anshul king    7 年前

    首先,在任何swift文件中写入此扩展名

    extension UIViewController {
        func hideKeyboardWhenTappedAround() {
            let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
            view.addGestureRecognizer(tap)
    
        }
    
        func dismissKeyboard() {
            view.endEditing(true)
        }
    }
    

    而在viewDidLoad中,该视图只在任何视图控制器中调用文本字段。

    self.hideKeyboardWhenTappedAround()
    
        2
  •  1
  •   Evgeniy    5 年前

    Swift 4,5。我总是使用隐藏键盘时,点击周围和返回按钮。

    override func viewDidLoad() {
        super.viewDidLoad()
        hideKeyboardWhenTappedAround()
        emailTextField.delegate = self // your UITextfield
        passwordTextField.delegate = self // your UITextfield
    }
    

    extension EmailAutorization: UITextFieldDelegate {
    
     // Return button tapped
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }
    
    // Around tapped
    func hideKeyboardWhenTappedAround() {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(EmailAutorization.dismissKeyboard))
        tap.cancelsTouchesInView = false
        view.addGestureRecognizer(tap)
    }
    
    @objc func dismissKeyboard() {
        view.endEditing(true)
    }
    

    }

        3
  •  1
  •   Imran Rasheed    4 年前

    以下是关闭键盘并在键盘上向上移动视图的解决方案:Swift 5

       override func viewDidLoad() {
        super.viewDidLoad()
        let tap = UITapGestureRecognizer(target: self, action: #selector(taped))
        view.addGestureRecognizer(tap)
        NotificationCenter.default.addObserver(self, selector: #selector(KeyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(KeyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
    }
    
     //This Method Will Hide The Keyboard
    @objc func taped(){
      self.view.endEditing(true)   
    }
    
    @objc func KeyboardWillShow(sender: NSNotification){
    
        let keyboardSize : CGSize = ((sender.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.size)!
        if self.view.frame.origin.y == 0{
            self.view.frame.origin.y -= keyboardSize.height
        }
    
    }
    
    @objc func KeyboardWillHide(sender : NSNotification){
    
        let keyboardSize : CGSize = ((sender.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size)!
        if self.view.frame.origin.y != 0{
            self.view.frame.origin.y += keyboardSize.height
        }
    
    }
       override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(true)
        NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
    }
    
        4
  •  0
  •   R.Radev    7 年前

    您是否尝试调试程序以查看代码是否在函数中停止(带有断点)?通常,此代码应该可以工作。。。检查这些 都在 超级视图 或在 子视图 如果他们是,也许你应该打电话 self.childView.endEditing(true) .

    如果你真的要处理多个文本字段,也许你应该试试 IQKeyboardManager 图书馆我在所有项目中都使用它。你可以在这里找到它: https://github.com/hackiftekhar/IQKeyboardManager . 使用简单,支持良好。只需将其安装到槽中即可 可可豆 IQKeyboardManager.sharedManager().enable = true 在AppDelegate中,您就可以开始了。:)

        5
  •  0
  •   haarismuneer    7 年前

    你确定吗 touchesBegan self.resignFirstResponder() 给你的 触摸开始

    如果没有,您需要做的是创建一个 UITapGestureRecognizer ,将其添加到视图中,并将其连接到调用 自己辞职第一响应者() .