2011-12-29 21 views
9

私はサブビューとしてUITextViewUITextFieldを持つUIViewを持っています。私はキーボードが自動的にtextFieldShouldReturn呼び出しに表示されたい。UITextViewのbecomeFirstResponsderが正常に機能していません

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
    [textView becomeFirstResponder]; 
    return YES; 
} 

しかし、これはうまくいかず、なんらかの理由でカーソルがテキスト表示の次の行に表示されます。テキストビューでテキストをnilに設定しようとしましたが、自動的にtextDidChangeメソッドが呼び出され、カーソルはテキストなしで新しい行に移動します。

enter image description here

これと同じ手法はUITextFieldのために正しく動作しても、それは、iOS 4.3でこの問題を解決するためのiOS 5.0が、どのように正常に動作します。あなたにも同様の選択肢があれば教えてください。

明らかなものがありませんか?

+0

もっとコードを表示できますか?また、あなたがストーリーボードを使用している場合は、ビューが最初に表示されるときにUITextViewを選択する方法があると信じています。これにより、手動で行う必要がないようにキーボードが表示されます。 –

+0

Kineticのコメントに追加するには、ストーリーボードプロジェクトはiOS 5用に正しくコンパイルするだけで問題になる可能性があります。そうでない場合は、UITextViewデリゲートメソッドで何か面白いことをやっているのでしょうか?投稿したブロックが問題ではないように見えるので、より具体的なヘルプのコードを投稿してください。 – Keller

答えて

31

同じrunloop内で、辞任して最初のレスポンダーになるという既知のバグがあります。以下を試してください

[textField resignFirstResponder]; 
[textView performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0]; 
+1

ところで、前にresignFirstResponderを呼び出す必要はないと思いますが、私はbecomeFirstResponderで十分だと思います。 – juanjo

+0

ありがとう、これは私のために働いた! – c0d3Junk13

関連する問題