iOS上鍵盤出現時輸入框不被覆蓋的幾種方法分析

2021-06-06 05:04:09 字數 3063 閱讀 9129

如果螢幕中的內容專案比較多,它就可能覆蓋住文字輸入框之類的物件。你必須調整你的內容,使得輸入框保持可見。

你會想到哪些處理方法呢?

第一種,

臨時調整視窗中各個檢視的大小,使得鍵盤從下向上占領的區域空白。鍵盤的高度(keyboard.size.height)是一定的,將檢視中所有內容所在區域的y值減小到y-keyboard.size.height。

該方法有個侷限,如果所有內容之和大於視窗減去鍵盤高度的話,該方法將不能用。

第二種,

將視窗中所有檢視嵌入進乙個滾動檢視物件(uiscrollview)中。在鍵盤出現時,你將輸入框滾動到合適的位置,調整一下滾動檢視的內容區域。

去實現的,邏輯過程如下:

1、根據通知的字典資訊userinfo得到鍵盤的size。

2、根據鍵盤的size中的height值,調整滾動檢視內容底部的inset。

3、滾動目標檢視即檔案輸入框進入檢視中。

簡要的**如下:

1、實現兩個委託方法,用於指定輸入框物件。

- (void)textfielddidbeginediting:(uitextfield *)textfield

activefield = textfield;

- (void)textfielddidendediting:(uitextfield *)textfield

activefield = nil;

2、註冊通知的觀察者

- (void)registerforkeyboardnotifications

[[nsnotificationcenter defaultcenter] addobserver:self

selector:@selector(keyboardwasshown:)

name:uikeyboarddidshownotification object:nil];

[[nsnotificationcenter defaultcenter] addobserver:self

selector:@selector(keyboardwillbehidden:)

name:uikeyboardwillhidenotification object:nil];

3、實現鍵盤顯示通知的selector中的方法

// called when the uikeyboarddidshownotification is sent.

- (void)keyboardwasshown:(nsnotification*)anotification

nsdictionary* info = [anotification userinfo];

cgsize kbsize = [[info objectforkey:uikeyboardframebeginuserinfokey] cgrectvalue].size;

uiedgeinsets contentinsets = uiedgeinsetsmake(0.0, 0.0, kbsize.height, 0.0);

scrollview.contentinset = contentinsets;

scrollview.scrollindicatorinsets = contentinsets;

// if active text field is hidden by keyboard, scroll it so it's visible

cgrect arect = self.view.frame;

arect.size.height -= kbsize.height;

if (!cgrectcontainspoint(arect, activefield.frame.origin) ) {

cgpoint scrollpoint = cgpointmake(0.0, activefield.frame.origin.y-kbsize.height);

[scrollview setcontentoffset:scrollpoint animated:yes];

4、實現鍵盤消失通知的方法

// called when the uikeyboardwillhidenotification is sent

- (void)keyboardwillbehidden:(nsnotification*)anotification

uiedgeinsets contentinsets = uiedgeinsetszero;

scrollview.contentinset = contentinsets;

scrollview.scrollindicatorinsets = contentinsets;

這個方法調整內容底部的inset的值使得輸入框不被鍵盤區域遮蔽的。還可以換種方法實現。

第三種,

擴充套件內容檢視的高度,滾動文字輸入框物件進內容檢視。

將keyboardwasshown:重寫。

- (void)keyboardwasshown:(nsnotification*)anotification {

nsdictionary* info = [anotification userinfo];

cgsize kbsize = [[info objectforkey:uikeyboardframebeginuserinfokey] cgrectvalue].size;

cgrect bkgndrect = activefield.superview.frame;

bkgndrect.size.height += kbsize.height;

[activefield.superview setframe:bkgndrect];

[scrollview setcontentoffset:cgpointmake(0.0, activefield.frame.origin.y-kbsize.height) animated:yes];

如何保持iOS上鍵盤出現時輸入框不被覆蓋

在ios5上請求顯示鍵盤時,系統從螢幕底部將鍵盤滑入上來,位於應用的內容之上。如果螢幕中的內容專案比較多,它就可能覆蓋住文字輸入框之類的物件。你必須調整你的內容,使得輸入框保持可見。你會想到哪些處理方法呢?第一種,臨時調整視窗中各個檢視的大小,使得鍵盤從下向上占領的區域空白。鍵盤的高度 keyboa...

iOS解決鍵盤遮擋輸入框問題

一 彈出鍵盤時,將整個檢視上移 監聽鍵盤事件 監聽鍵盤 1 鍵盤彈出時 nsnotificationcenter defaultcenter addobserver self selector selector keyboardwillshow name uikeyboardwillshownoti...

iOS 鍵盤擋住輸入框的解決方案

原理 利用通知來實現對鍵盤狀態的監聽 直接上 1.註冊通知 鍵盤即將彈出 uikeyboardwillshownotification 鍵盤已經彈出 uikeyboarddidshownotification 鍵盤即將隱藏 uikeyboardwillhidenotification 鍵盤已經隱藏 ...