ios 深入講解iOS鍵盤一:控制鍵盤隱藏顯示


 

在iOS的開發中,我們一般使用UITextField、UITextView處理文字輸入等操作,大部分情況下我們只需要一兩行代碼去手動管理鍵盤的顯示隱藏:讓UITextField或UITextView成為第一響應者的時候會自動喚起鍵盤,當我們點擊其他區域的時候讓UITextField或UITextView失去焦點,鍵盤自動隱藏。

1
2
3
4
5
6
7
8
//是否能成為第一響應者
- (BOOL)canBecomeFirstResponder;     // default is NO
//成為第一響應者(彈出鍵盤)
- (BOOL)becomeFirstResponder;
//是否能放棄成為第一響應者
- (BOOL)canResignFirstResponder;     // default is YES
//放棄城額外對響應者(隱藏鍵盤)
- (BOOL)resignFirstResponder;

但有的情況下,我們還需要控制鍵盤的顯示以及隱藏的動畫,比如系統的iMessage的鍵盤跟隨UITextField的彈出/隱藏效果。

這個時候我們就需要通過動態的調整TextField的Frame來實現跟隨鍵盤移動的動畫效果。為了解決這個問題,我們自然而然需要了解鍵盤的高度和鍵盤的動畫,這樣我們才能讓鍵盤上部的TextField跟隨鍵盤運動。

由於鍵盤在橫豎屏的情況下的高度不同,以及可能存在工具欄(影響鍵盤的高度),因此如果每次都動態獲取鍵盤高度的話會非常繁瑣,幸好蘋果給我們提供了一套關於鍵盤處理的解決方案。

鍵盤通知

為了讓開發者在鍵盤彈出/隱藏時方便做處理,蘋果提供了鍵盤的幾個通知,分別是

我們在監聽了以上的某個通知后,可以獲取到當前狀態下的鍵盤高度,鍵盤動畫的一些參數

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Call this method somewhere in your view controller setup code.
- ( void )registerForKeyboardNotifications
{
     [[NSNotificationCenter defaultCenter] addObserver:self
             selector:@selector(keyboardWasShown:)
             name:UIKeyboardDidShowNotification object:nil];
 
    [[NSNotificationCenter defaultCenter] addObserver:self
              selector:@selector(keyboardWillBeHidden:)
              name:UIKeyboardWillHideNotification object:nil];
}
 
// Called when the UIKeyboardDidShowNotification is sent.
- ( void )keyboardWasShown:(NSNotification*)aNotification
{
     NSDictionary* info = [aNotification userInfo];
     //獲取結束時的Frame值
     CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
     //獲取動畫時間
     NSTimeInterval animationDuration = [info[UIKeyboardAnimationDurationUserInfoKey] floatValue];
     //...
}
 
// Called when the UIKeyboardWillHideNotification is sent
- ( void )keyboardWillBeHidden:(NSNotification*)aNotification
{
     //...
}

有了鍵盤通知以后,我們可以輕易的實現本文開頭提出的問題,這里筆者做了個Demo演示如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM