iOS中鍵盤自動隱藏
前言
很多時候當我們在一個文本框中輸入信息后,按了確認或者返回鍵需要隱藏鍵盤,或者在其他空白區域點擊屏幕后也需要隱藏屏幕。
這時肯定就需要讓相應的控件響應Tap事件(點擊事件),這樣我們才能處理。
實現隱藏的兩種方法
在IOS中有一個概念叫First Responder,意指第一響應者,也就是當前屏幕上,處于焦點狀態的控件,它是第一響應者,我們在界面的觸摸的各種手勢都是由這個控件接收的。那么很好理解,當用戶點擊一個輸入框之后,彈出輸入鍵盤,此時這個文本輸入框便是第一響應者,那現在要隱藏鍵盤,其實就是不讓這個文本輸入框作為第一響應者。
文本輸入框為我們提供了這么一個方法:resignFirstResponser
UITextField.resignFirstResponder()這樣就取消了這個文本輸入框的第一響應者身份了,鍵盤也就自動隱藏了。
當有很多輸入框時,我們還可以使用UIView提供一個就更快的方法:endEditing
UIView.endEditing(true)直接把整個UIView的編輯狀態取消掉,那不管界面上哪個輸入框作為第一響應者身份,都能被取消編輯狀態,鍵盤也就消失了。
如何觸發
知道了如何讓鍵盤隱藏,那就要在恰當時機去執行它。通常有兩種方法:
1)鍵盤右下角的return、完成按鈕被點下時
2)輸入框周圍的空白區域被點擊時
第一種方法,需要處理輸入框的DidEndOnExit事件:
@IBAction func txt_DidEndOnExit(sender: UITextField) { sender.resignFirstResponder() }可以把n個輸入框的DidEndOnExit事件都關聯到這個事件方法上,這樣就不用一個個寫重復代碼了。
第二種方法,當點擊空白區域時,鍵盤自動隱藏,一般這個空白區域就是一個UIView,我們需要讓UIView響應點擊(tap)事件,但是要知道響應事件是UIControl的事情,所以,我們需要把這個UIView改成UIControl,因為UIControl是UIView的子類,所以完全可行!
把View的Class改成UIControl,那么這個View就能像UIControl那些控件一樣,可以接收點擊事件了。
我們處理這個大Control的Touch Down事件:
@IBAction func touchDown(sender: UIControl) { txtName.resignFirstResponder() }注意,這時就不是用sender對象了,sender是UIControl的,我們是要讓輸入框取消第一響應者狀態。
這里僅爭對使用普通UIView的界面,當使用UTableViewController時,就不能用這種方法咯,需要手動創建一個手勢識別器,將它關聯到整個UITableViewController。
使用UITableViewControl這種控件時如何觸發
要知道,手勢識別器可以很靈活的關聯到任意一個View上,所以我們可以為UITableViewController創建一個UITapGestureRecognizer的點擊識別器。
在ViewDidLoad方法中寫入:
override func viewDidLoad() { super.viewDidLoad() var tap = UITapGestureRecognizer(target: self, action: "keyboardHide:") tap.cancelsTouchesInView = false self.view.addGestureRecognizer(tap) } func keyboardHide(tapG:UITapGestureRecognizer){ //整個view 結束編輯狀態(方法一) self.view.endEditing(true) //單個輸入框(方法二) self.txtUserName.resignFirstResponder() }這樣整個 UITableViewController的空白區域都能接收tap事件了,也就實現了隱藏輸入框的功能。
tips: