在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演示如下: