歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

關閉iOS虛擬鍵盤的六種方法

在iOS應用中,輸入操作的方式之一是使用虛擬鍵盤。打開很容易,關閉卻有一些講究。這需要我們去研究一下。我所知道的需要打開虛擬鍵盤的三類視圖對象分別是UITextField,UITextView和UISearchBar。實現這個操作的方法大體是點擊虛擬鍵盤的return鍵或done鍵等關閉它,或者是點擊鍵盤之外的區域關閉它。最好的方法是點擊虛擬鍵盤之外的區域來關閉它的方法,采用的是覆蓋視圖控制器的hitTest:withEvent:方法實現。

我就UITextField如何關閉虛擬鍵盤舉個例子,介紹我所知道的幾種方法。

第一種方法,使用它的委托UITextFieldDelegate中的方法textFieldShouldReturn:來關閉虛擬鍵盤。

在UITextField視圖對象如birdNameInput所在的類中實現這個方法。

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if ((textField == self.birdNameInput) || (textField == self.locationInput)) {
        [textField resignFirstResponder];
    }
    return YES;
}

這樣,在輸入框birdNameInput中打開虛擬鍵盤後,輕擊鍵盤的return鍵就會自動關閉掉虛擬鍵盤。

第二種方法,將birdNameInput的屬性中Return Key修改為done,再定義一個方法和Done鍵的Did End On Exit連接。通過輕擊done鍵觸發這個事件來關閉虛擬鍵盤。

定義的方法如下:

- (IBAction) textFieldDoneEditing:(id)sender
{
        [sender resignFirstResponder];
}

這兩個方法都是輕擊虛擬鍵盤上一個鍵來關閉它。這屬於精確操作,而手指不像鼠標,做這種操作不容易。因此就UI層面而言,這兩個方法都不是最好的方法。

在iphone或ipad屏幕上,虛擬鍵盤占用的面積大小是有限的。通過輕擊虛擬鍵盤之外的區域而關閉虛擬鍵盤。

第三種方法,通過輕擊鍵盤之外的空白區域關閉虛擬鍵盤。

在birdNameInput所屬的視圖控制器類的viewDidLoad方法中定義一個UITapGestureRecognizer的對象,然後將它賦值為它的視圖。

UITapGestureRecognizer *tap =
[[UITapGestureRecognizer alloc]  initWithTarget:self action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
[tap release];

再定義一下選擇器調用的方法dismissKeyboard。

-(void)dismissKeyboard {
      [birdNameInput resignFirstResponder];
}

如果屏幕上有多個textField的話,一個一個地列出來就有些麻煩。那麼將方法修改一下,如下:

-(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];
            }
        }
    }
}

如果這個屏幕上的視圖對象很復雜的話,另當別論。

這個方法是編碼新建一個手勢對象。也可以直接使用interface builder圖形化開發工具,在storyboard中拉入一個手勢對象到視圖控制器類中,再將此手勢對象建立一個IBACTION,名稱可以是dismissKeyboard。

Copyright © Linux教程網 All Rights Reserved