2012-05-25 37 views
4

我有一些iPad應用程序,用戶將使用觸摸屏或藍牙鍵盤導航。 我有一些隱藏的textView焦點(第一響應者),在這裏我檢測到從鍵盤輸入的內容。SDK安全的方式來隱藏iPad的鍵盤時textview焦點

但是,當我斷開鍵盤,我有一個問題,虛擬鍵盤出現。

我可以檢查藍牙鍵盤是否連接,並設置或退出viewDidLoad或第一響應者?

我有通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillAppear:) name:UIKeyboardWillShowNotification object:nil]; 

我可以隱藏鍵盤上的一些方法keyboardWillAppear被觸發時? 我試過[textView resignFirstResponder],但沒有成功:

回答

5

您可以在inputView設置爲透明觀點:

UIView *emptyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; 
emptyView.backgroundColor = [UIColor clearColor]; 
textView.inputView = emptyView; 

從理論上講,將屏幕鍵盤設置爲空視圖,因此將不可見。如果它不接受沒有框架的視圖,則嘗試將寬度和高度顛倒爲1.它不會影響外部鍵盤;它只是不會顯示在設備上。

5

你可以使用performSelector:。

- (void)hideKeyboard:(UITextView *)textView { 
    [textView resignFirstResponder]; 
} 

- (void)keyboardWillAppear:(NSNotification *)notification { 
    UITextView *textView = (UITextView *)[self.view viewWithTag:TEXTVIEW_TAG]; 

    [self performSelector:@selector(hideKeyboard:) withObject:textView]; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillAppear:) name:UIKeyboardWillShowNotification object:nil]; 
} 
+0

我收到了同樣的結果。還有一個更正,它是TextView,而不是TextField。 – dormitkon

+0

謝謝,我修好了。 –

0

您必須安排textView的第一個響應者辭職到一個調度隊列,因爲成爲第一響應者的過程可能還沒有完成。使用XCode的調度模板的簡單解決方案:

int64_t delayInSeconds = 0; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    [self.textView resignFirstResponder]; 
});