[英]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.