切換中文鍵盤時覆蓋輸入框的完美解決方案

2022-09-03 09:39:12 字數 1427 閱讀 6160

ios5之前,iphone上的鍵盤的高度是固定為216.0px高的,中文漢字的選擇框是懸浮的,所以不少應用都將此高度來標註鍵盤的高度(包括公尺聊也是這麼做的)。

可是在ios5中,鍵盤布局變了,尤其是中文輸入時,中文漢字選擇框就固定在鍵盤上方,這樣就使得原本與鍵盤緊密貼合的介面檢視被中文漢字選擇框給覆蓋住了。一方面影響了介面的美觀,另一方面,如果被覆蓋的部分就是文字輸入框的話,使用者就無法看到輸入的內容了。因此這個問題就必須得解決了。

解決方法

其實在一開始使用216.0px這個固定值來標註鍵盤的高度就是錯誤的。因為在ios3.2以後的系統中,蘋果就提供了鍵盤使用的api以及demo程式——「keyboardaccessory」。

處理鍵盤事件的正確方法是這樣的:(包括獲取鍵盤的位置以及鍵盤彈出和消失動畫的時間)

1)在要使用鍵盤的檢視控制器中(既viewdidload中),接收鍵盤事件的通知:

[[nsnotificationcenter defaultcenter] addobserver:self selector:@selector(keyboardwillshow:) name:uikeyboardwillshownotification object:nil];

[[nsnotificationcenter defaultcenter] addobserver:self selector:@selector(keyboardwillhide:) name:uikeyboardwillhidenotification object:nil];

// 鍵盤高度變化通知,ios5.0新增的 

#ifdef __iphone_5_0

float version = [[[uidevice currentdevice] systemversion] floatvalue];

if (version >= 5.0)

#endif

2)然後新增鍵盤事件的處理**:

獲取到當前keyboard的高度以及動畫時間,然後對檢視進行對應的操作即可。

#pragma mark -

#pragma mark responding to keyboard events

- (void)keyboardwillshow:(nsnotification *)notification  completion:^(bool finished)

- (void)keyboardwillhide:(nsnotification *)notification  completion:^(bool finished)

3)在檢視控制器消除時(即viewdidunload中),移除鍵盤事件的通知:

[[nsnotificationcenter defaultcenter] removeobserver:self];

iOS5 切換中文鍵盤時覆蓋輸入框的完美解決方案

眾所周知,ios5之前,iphone上的鍵盤的高度是固定為216.0px高的,中文漢字的選擇框是懸浮的,所以不少應用都將此高度來標註鍵盤的高度 包括公尺聊也是這麼做的 可是在ios5中,鍵盤布局變了,尤其是中文輸入時,中文漢字選擇框就固定在鍵盤上方,這樣就使得原本與鍵盤緊密貼合的介面檢視被中文漢字選...

IOS開發鍵盤彈出時遮住輸入框的問題

ios uitextview實現自動隱藏鍵盤 三 步 設定 text input traits return key 為done 去掉auto enable return key 選中狀態。建立乙個類為 inte ce boardreturn nsobject end implementation ...

當鍵盤擋住輸入框的時候讓輸入框往上移動

用的是通知 當鍵盤出現時 nsnotificationcenter defaultcenter addobserver self selector selector keyboardwillshow name uikeyboardwillshownotification object nil 當鍵盤...