iOS應用中,輸入操作的方式之一是使用虛擬鍵盤(pán),打開(kāi)很容易,關(guān)閉卻有一些講究,app軟件開(kāi)發(fā)介紹以下四種常用的方法。
第一種方法,使用它的委托UITextFieldDelegate中的方法textFieldShouldReturn:來(lái)關(guān)閉虛擬鍵盤(pán)。
在UITextField視圖對象如birdNameInput所在的類(lèi)中實(shí)現這個(gè)方法。
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
if ((textField == self.birdNameInput) || (textField == self.locationInput)) {
[textField resignFirstResponder];
}
return YES;
}
這樣,在輸入框birdNameInput中打開(kāi)虛擬鍵盤(pán)后,輕擊鍵盤(pán)的return鍵就會(huì )自動(dòng)關(guān)閉掉虛擬鍵盤(pán)。
第二種方法,將birdNameInput的屬性中Return Key修改為done,再定義一個(gè)方法和Done鍵的Did End On Exit連接。通過(guò)輕擊done鍵觸發(fā)這個(gè)事件來(lái)關(guān)閉虛擬鍵盤(pán)。
定義的方法如下:
- (IBAction) textFieldDoneEditing:(id)sender
{
[sender resignFirstResponder];
}
這兩個(gè)方法都是輕擊虛擬鍵盤(pán)上一個(gè)鍵來(lái)關(guān)閉它。這屬于精確操作,而手指不像鼠標,做這種操作不容易。因此就UI層面而言,這兩個(gè)方法都不是最好的方法。
在iphone或ipad屏幕上,虛擬鍵盤(pán)占用的面積大小是有限的。通過(guò)輕擊虛擬鍵盤(pán)之外的區域而關(guān)閉虛擬鍵盤(pán)。
第三種方法,通過(guò)輕擊鍵盤(pán)之外的空白區域關(guān)閉虛擬鍵盤(pán)。
在birdNameInput所屬的視圖控制器類(lèi)的viewDidLoad方法中定義一個(gè)UITapGestureRecognizer的對象,然后將它賦值為它的視圖。
UITapGestureRecognizer *tap =
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
[tap release];
再定義一下選擇器調用的方法dismissKeyboard。
-(void)dismissKeyboard {
[birdNameInput resignFirstResponder];
}
如果屏幕上有多個(gè)textField的話(huà),一個(gè)一個(gè)地列出來(lái)就有些麻煩。那么將方法修改一下,如下:
-(void)dismissKeyboard {
NSArray *subviews = [self.view subviews];
for (id objInput in subviews) {
if ([objInput isKindOfClass:[UITextField class]]) {
UITextField *theTextField = objInput;
if ([objInput isFirstResponder]) {
[theTextField resignFirstResponder];
}
}
}
}
第四種方法,通過(guò)輕擊鍵盤(pán)之外的空白區域關(guān)閉虛擬鍵盤(pán)。
將屏幕上的view也就是textField的父視圖拖一個(gè)touch down事件出來(lái),和一個(gè)能關(guān)閉虛擬鍵盤(pán)的方法連接。如果視圖沒(méi)有touch down事件,可將view的父類(lèi)從UIView修改為UIButton。
首先定義并實(shí)現一個(gè)方法backgroundTap:。
- (IBAction) backgroundTap:(id)sender
{
NSArray *subviews = [self.view subviews];
for (id objInput in subviews) {
if ([objInput isKindOfClass:[UITextField class]]) {
UITextField *theTextField = objInput;
if ([objInput isFirstResponder]) {
[theTextField resignFirstResponder];
}
}
}
}
然后選擇背景視圖的Touch Down事件,連接 backgroundTap:即可。這樣只要輕擊一下虛擬鍵盤(pán)之外的區域,就能關(guān)閉虛擬鍵盤(pán)。這些方法都是使用resignFirstResponder方法來(lái)關(guān)閉虛擬鍵盤(pán),還有其他的方法。