關於隱藏軟鍵盤,網上的辦法參差不齊,大可能是經過實現UITextFieldDelegate來隱藏軟鍵盤,該方法代碼較多,且在文本框不少的時很差處理。我通過搜索與摸索,找到了最佳的處理辦法。ide
當對於有多個UITextField控件都想經過點擊「Return」來隱藏自身軟鍵盤的狀況,這時的最好辦法是使用Did End on Exit事件。在點擊軟鍵盤右下角的「Return」按鈕後,會觸發該事件。
該事件有一個sender參數表示當前文本框,這樣即可以編寫一個通用的事件處理方法(.m文件)——spa
- (IBAction)TextField_DidEndOnExit:(id)sender { // 隱藏鍵盤. [sender resignFirstResponder]; }
而後在.h文件中填寫該方法的聲明——code
- (IBAction)TextField_DidEndOnExit:(id)sender;
回到storyboard,並按command+option+enter打開輔助窗口,使輔助窗口顯示.h文件。
選中一個UITextField控件,點擊鼠標右鍵彈出面板,鼠標左鍵按住Did End on Exit事件旁邊的圓圈,而後拖曳到右側.h文件的TextField_DidEndOnExit方法上,便會創建好事件鏈接。
隨後按照一樣的作法,將其餘UITextField控件的Did End on Exit事件也鏈接到TextField_DidEndOnExit方法。blog
運行一下,可發現每一個文本框的軟鍵盤均可以經過點擊「Return」來隱藏了。事件
當頁面中有不少個文本框時,若是每次都須要點文本框激活軟鍵盤、輸入後點擊Return隱藏軟鍵盤、再點擊下一個文本框……這樣操做起來太繁瑣了。
因而咱們但願可以實現點擊Return時可以自動轉到下一個文本框。尤爲是對於最後一個文本框,但願可以在點擊Return時執行下一步操做。it
例如對於登陸頁面。它上面有 帳號文本框(nameTextField)、密碼文本框(passTextField)、登陸按鈕(loginButton)。
咱們但願——點擊帳號文本框軟鍵盤的Return時跳轉到密碼文本框,點擊密碼文本框軟鍵盤的Return時執行登陸。
由於這兩個文本框的功能不一樣,不能像上一節那樣寫一個TextField_DidEndOnExit作統一處理,而應該分別創建各自的事件處理方法。io
回到storyboard,右擊帳號文本框(nameTextField)彈出面板,按住Did End on Exit事件旁邊的圓圈,而後拖曳到右側.h文件的空白地方,此時會彈出一個對話框給方法命名。輸入名稱(nameTextField_DidEndOnExit)後回車肯定,便自動生成了該事件方法。
隨後按照一樣的作法,爲密碼文本框(passTextField)的Did End on Exit事件鏈接方法(passTextField_DidEndOnExit)。
來到.m文件,填寫具體代碼——class
- (IBAction)nameTextField_DidEndOnExit:(id)sender { // 將焦點移至下一個文本框. [self.passTextField becomeFirstResponder]; } - (IBAction)passTextField_DidEndOnExit:(id)sender { // 隱藏鍵盤. [sender resignFirstResponder]; // 觸發登錄按鈕的點擊事件. [self.loginButton sendActionsForControlEvents:UIControlEventTouchUpInside]; }
對於帳號文本框轉密碼文本框,不須要隱藏軟鍵盤,只須要調用becomeFirstResponder激活新的文本框就好了。
對於密碼文本框Return後執行登陸。由於再也不須要顯示軟鍵盤,因此仍是得調用resignFirstResponder隱藏軟鍵盤,而後觸發登陸按鈕(loginButton)的UIControlEventTouchUpInside事件進行登陸。登錄
運行一下,可發現已經達到咱們但願的效果了。點擊帳號文本框軟鍵盤的Return時跳轉到密碼文本框,點擊密碼文本框軟鍵盤的Return時執行登陸。
怎麼都是「Return」,轉換文本框與執行登陸明明是不一樣的功能?
因而將帳號文本框的Return Key屬性設爲「Next」,將密碼文本框的Return Key屬性設爲「Done」,使界面與功能一致。select
只能經過Return關閉軟鍵盤太不靈活了,應該提供輕觸背景隱藏軟鍵盤的功能。
在storyboard,點擊背景View,將它的Custom Class設置爲UIControl,這樣纔會出現Touch Down事件。
右擊背景View彈出面板,按住Touch Down事件旁邊的圓圈,而後拖曳到右側.h文件的空白地方創建該事件的處理方法。
來到.m文件,填寫具體代碼——
- (IBAction)View_TouchDown:(id)sender { // 發送resignFirstResponder. [[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil]; }