簡體   English   中英

在 iOS 中關閉鍵盤

[英]Dismiss keyboard in iOS

我查看並嘗試了 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 個文本字段,它們都將委托設置為 self。 按回車鍵時,它們的標簽會遞增以移至下一個文本字段。 不要認為這會影響它。 對不起,新來的! 代碼與這些嘗試的功能中的任何一個都運行良好,但它們的鍵盤保持不變。 我只想在任何文本字段之外觸摸時關閉鍵盤。

首先在任何 swift 文件中編寫這個擴展

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

    }

    func dismissKeyboard() {
        view.endEditing(true)
    }
}

比該視圖的 viewDidLoad 只在任何視圖控制器中調用有 textFields。

self.hideKeyboardWhenTappedAround()

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)
}

}

您確定正在調用touchesBegan嗎? 如果您確定,請嘗試將self.resignFirstResponder()添加到您的touchesBegan函數中。 這告訴你的視圖控制器它不再是第一響應者,應該關閉鍵盤。

如果沒有,您需要做的是創建一個UITapGestureRecognizer ,將其添加到您的視圖中,並將其連接到一個調用self.resignFirstResponder()的函數。

您是否嘗試調試程序以查看代碼是否在函數中完全停止(帶斷點)? 通常這段代碼應該可以工作...檢查這些textFields是在超級視圖中還是在子視圖中,如果是的話,你應該調用self.childView.endEditing(true)

如果您真的使用多個 textFields,也許您應該嘗試使用IQKeyboardManager庫。 我在所有項目中都使用它。 你可以在這里找到它: https : //github.com/hackiftekhar/IQKeyboardManager 使用簡單,支持良好。 只需通過可可豆莢安裝它,將IQKeyboardManager.sharedManager().enable = true放在 AppDelegate 中,您就可以開始使用了。 :)

這是關閉鍵盤並在鍵盤打開時向上移動視圖的解決方案: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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM