iOS中鍵盤自動隱藏

g2md 9年前發布 | 10K 次閱讀 IOS 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的子類,所以完全可行!

iOS中鍵盤自動隱藏

把View的Class改成UIControl,那么這個View就能像UIControl那些控件一樣,可以接收點擊事件了。

iOS中鍵盤自動隱藏

我們處理這個大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:

原文鏈接:http://devonios.com/ios-hide-keykeyboard.html

 本文由用戶 g2md 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!