iOS開發- 隱藏鍵盤總結 – iPhone手機開發技術文章 iPhone軟體開發教學課程

一、隱藏自身軟鍵盤

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

- (IBAction)TextField_DidEndOnExit:(id)sender { 
// 隱藏鍵盤. 
[sender resignFirstResponder]; 
} 

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

- (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文件,填寫具體代碼——

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

對於賬號文本框轉密碼文本框,不需要隱藏軟鍵盤,隻需要調用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文件,填寫具體代碼——

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

四、自定義鍵盤

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

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

效果如下:

代碼如下:vcD48cD48L3A+PHByZSBjbGFzcz0=”brush:java;”>- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

if (self.keyboardToolbar == nil)
{
self.keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 38.0f)];
self.keyboardToolbar.barStyle = UIBarStyleBlackTranslucent;

UIBarButtonItem *previousBarItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@”前進”, @””)
style:UIBarButtonItemStyleBordered
target:self
action:@selector(previousField:)];

UIBarButtonItem *nextBarItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@”後退”, @””)
style:UIBarButtonItemStyleBordered
target:self
action:@selector(nextField:)];

UIBarButtonItem *spaceBarItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil
action:nil];

UIBarButtonItem *doneBarItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@”隱藏”, @””)
style:UIBarButtonItemStyleDone
target:self
action:@selector(resignKeyboard:)];

[self.keyboardToolbar setItems:[NSArray arrayWithObjects:previousBarItem, nextBarItem, spaceBarItem, doneBarItem, nil]];
}

self.myTextView.inputAccessoryView = self.keyboardToolbar;

}

#pragma mark – your code
– (void)resignKeyboard:(id)sender
{
[self.myTextView resignFirstResponder];
}

– (void)previousField:(id)sender
{

}

– (void)nextField:(id)sender
{

}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。