閱讀482 返回首頁    go 阿裏雲 go 技術社區[雲棲]


鍵盤的回收

當對於有多個UITextField控件都想通過點擊“Return”來隱藏自身軟鍵盤的情況,這時的最好辦法是使用Did End on Exit事件。在點擊軟鍵盤右下角的“Return”按鈕後,會觸發該事件。
該事件有一個sender參數表示當前文本框,這樣便可以編寫一個通用的事件處理方法(.m文件)——
  1. - (IBAction)TextField_DidEndOnExit:(id)sender {   
  2. // 隱藏鍵盤.   
  3. [sender resignFirstResponder];   
  4. }   


然後在.h文件中填寫該方法的聲明——

  1. - (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方法。

運行一下,可發現每個文本框的軟鍵盤都可以通過點擊“Return”來隱藏了。

二、點擊Return自動轉到下個文本框


當頁麵中有很多個文本框時,如果每次都需要點文本框激活軟鍵盤、輸入後點擊Return隱藏軟鍵盤、再點擊下一個文本框……這樣操作起來太繁瑣了。 於是我們希望能夠實現點擊Return時能夠自動轉到下一個文本框。尤其是對於最後一個文本框,希望能夠在點擊Return時執行下一步操作。

例如對於登錄頁麵。它上麵有 賬號文本框(nameTextField)、密碼文本框(passTextField)、登錄按鈕(loginButton)。
我們希望——點擊賬號文本框軟鍵盤的Return時跳轉到密碼文本框,點擊密碼文本框軟鍵盤的Return時執行登錄。
因為這兩個文本框的功能不同,不能像上一節那樣寫一個TextField_DidEndOnExit做統一處理,而應該分別建立各自的事件處理方法。

回到storyboard,右擊賬號文本框(nameTextField)彈出麵板,按住Did End on Exit事件旁邊的圓圈,然後拖曳到右側.h文件的空白地方,此時會彈出一個對話框給方法命名。輸入名稱 (nameTextField_DidEndOnExit)後回車確定,便自動生成了該事件方法。
隨後按照同樣的做法,為密碼文本框(passTextField)的Did End on Exit事件連接方法(passTextField_DidEndOnExit)。
來到.m文件,填寫具體代碼——

  1. - (IBAction)nameTextField_DidEndOnExit:(id)sender {   
  2. // 將焦點移至下一個文本框.   
  3. [self.passTextField becomeFirstResponder];   
  4. }   
  5. - (IBAction)passTextField_DidEndOnExit:(id)sender {   
  6. // 隱藏鍵盤.   
  7. [sender resignFirstResponder];   
  8. // 觸發登陸按鈕的點擊事件.   
  9. [self.loginButton sendActionsForControlEvents:UIControlEventTouchUpInside];   
  10. }   


對於賬號文本框轉密碼文本框,不需要隱藏軟鍵盤,隻需要調用becomeFirstResponder激活新的文本框就行了。
對於密碼文本框Return後執行登錄。因為不再需要顯示軟鍵盤,所以還是得調用resignFirstResponder隱藏軟鍵盤,然後觸發登錄按鈕(loginButton)的UIControlEventTouchUpInside事件進行登錄。

運行一下,可發現已經達到我們希望的效果了。點擊賬號文本框軟鍵盤的Return時跳轉到密碼文本框,點擊密碼文本框軟鍵盤的Return時執行登錄。
怎麼都是“Return”,轉換文本框與執行登錄明明是不同的功能?
於是將賬號文本框的Return Key屬性設為“Next”,將密碼文本框的Return Key屬性設為“Done”,使界麵與功能一致。

三、輕觸背景隱藏軟鍵盤


隻能通過Return關閉軟鍵盤太不靈活了,應該提供輕觸背景隱藏軟鍵盤的功能。

在storyboard,點擊背景View,將它的Custom Class設置為UIControl,這樣才會出現Touch Down事件。
右擊背景View彈出麵板,按住Touch Down事件旁邊的圓圈,然後拖曳到右側.h文件的空白地方建立該事件的處理方法。
來到.m文件,填寫具體代碼——

  1. - (IBAction)View_TouchDown:(id)sender {   
  2. // 發送resignFirstResponder.   
  3. [[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];   
  4. }   


四、自定義鍵盤

源碼可以到我的github中下載:https://github.com/colin1994/myKeyboard.git

可以通過自定義鍵盤, 在鍵盤上加入你需要的功能, 即可。

效果如下:



代碼如下:

  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.     // Do any additional setup after loading the view, typically from a nib.  
  5.       
  6.       
  7.       
  8.     if (self.keyboardToolbar == nil)  
  9.     {  
  10.         self.keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 38.0f)];  
  11.         self.keyboardToolbar.barStyle = UIBarStyleBlackTranslucent;  
  12.           
  13.         UIBarButtonItem *previousBarItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"前進", @"")  
  14.                                                                             style:UIBarButtonItemStyleBordered  
  15.                                                                            target:self  
  16.                                                                            action:@selector(previousField:)];  
  17.           
  18.         UIBarButtonItem *nextBarItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"後退", @"")  
  19.                                                                         style:UIBarButtonItemStyleBordered  
  20.                                                                        target:self  
  21.                                                                        action:@selector(nextField:)];  
  22.           
  23.         UIBarButtonItem *spaceBarItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace  
  24.                                                                                       target:nil  
  25.                                                                                       action:nil];  
  26.           
  27.         UIBarButtonItem *doneBarItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"隱藏", @"")  
  28.                                                                         style:UIBarButtonItemStyleDone  
  29.                                                                        target:self  
  30.                                                                        action:@selector(resignKeyboard:)];  
  31.           
  32.         [self.keyboardToolbar setItems:[NSArray arrayWithObjects:previousBarItem, nextBarItem, spaceBarItem, doneBarItem, nil]];  
  33.     }  
  34.       
  35.     self.myTextView.inputAccessoryView = self.keyboardToolbar;  
  36.   
  37. }  
  38.   
  39.   
  40. #pragma mark - your code  
  41. - (void)resignKeyboard:(id)sender  
  42. {  
  43.     [self.myTextView resignFirstResponder];  
  44. }  
  45.   
  46. - (void)previousField:(id)sender  
  47. {  
  48.   
  49. }  
  50.   

最後更新:2017-04-03 05:39:19

  上一篇:go sed 多行替換,多行模式處理字符串;一次替換
  下一篇:go SNMP 簡單網絡管理協議