2011-12-12 44 views
12

我得到了一個TextView,它應該在按下按鈕時顯示,並讓用戶通過鍵盤輸入文本。疑難解答成爲第一個未顯示某些用戶的鍵盤的第一個響應者

- (IBAction) changeName { 

    changeNameBtn.hidden = YES; 
    backBtn.hidden = YES; 

    usernameLabel.hidden = NO; 
    inputTextField.hidden = NO; 
    [inputTextField becomeFirstResponder]; // to show keyboard 
} 

這對我們大多數人都適用。

但是,鍵盤不顯示我的一些測試人員,在地理位置偏遠的位置。如何解決這個問題?什麼可能是我們設備的不同行爲的原因?它適用於我和其他人。我們都使用相同的設備(iPod,iOS 4.1 - 5.1)。

我試過沒有工作的第一件事:

我猜將inputTextField確實在某些方面不能及時變得可見,becomeFirstResponder被解僱之前,所以我加了setNeedsDisplay,因爲我認爲這會強制更新。

[inputTextField setNeedsDisplay]; 
[inputTextField becomeFirstResponder]; 

的事情我想不工作:

if([inputTextField canBecomeFirstResponder]){ 
    [inputTextField becomeFirstResponder]; 
} 

的事情我想是一種變通方法,要求倒黴用戶按領域:

- (IBAction) inputTextFieldTouch { 
    [inputTextField becomeFirstResponder]; 
} 

這種解決方法有效,但必須有更好的方法。請賜教我關於我做錯了什麼! :)以及如何處理這樣的問題,而不能自己複製它?

回答

9

當您嘗試使其成爲第一響應者時,textview尚未完成繪製。

您可以嘗試在完成塊中設置動畫效果並設置第一響應者。

[UIView animateWithDuration:0.0 animations:^{ 
    [view addSubview:textView]; 
} completion:^(BOOL finished){ 
    [textView becomeFirstResponder]; 
}]; 
0

試一試,看是否可以先顯示鍵盤:

if([inputTextField canBecomeFirstResponder]){ 
    [inputTextField becomeFirstResponder]; 
} 
26

我叫becomeFirstResponder後來這一行:

[self.searchBar performSelector:@selector(becomeFirstResponder) 
        withObject:nil 
        afterDelay:0.1f]; 

它爲我工作。希望這個幫助。

+0

實際上比答案效果更好,這標記是正確的。 –

+0

更好,怎麼樣,伊利亞? – JOG

4

由於iOS8上,呼籲becomeFirstResponder上一個UITextView不顯示的鍵盤,我在iOS模擬器,但它在實際設備上。所以一定要用實際的設備來檢查它。雖然這不會發生在iOS7上。

+8

您是否按下了Cmd + Shift + K來使用電腦的鍵盤?這顯示並隱藏了模擬器的鍵盤給我。 – chedabob

+0

我所有的測試人員都使用實際的設備,包括鍵盤沒有顯示的設備。正如問題所述,「我們都使用相同的設備(iPod,iOS 4.1 - 5.1)」。 – JOG