1

私は常にFirstResponderを辞任する必要がありUITextViewますか?または、View Controllerが消えたときに、これは自動的に発生しますか?

iPhone Objective-Cと同様の問題が発生しているため、質問しています。キーボードがresignFirstResponderで非表示にならない場合があります。この場合、navコントローラーが他のViewControllerを押したりポップしたりしてもキーボードは開いたままになります。キーボードは機能し、[完了]をクリックすると、フォーカスUITextViewが外れます(つまり、カーソルが消えます)が、キーボードは上に留まります。

なぜこれが起こっているのかわかりませんでしたが、resignFirstResponder別のView Controllerをプッシュする前にこれを行わなかったことが原因である可能性がありますが、オプションだと思いましたか?

4

4 に答える 4

2

全体的に推測すると、UITextViewには(デリゲートとしての)View Controllerへの参照がありますが、それを保持していません。次の画面に進むと、コントローラーの割り当てが解除され、UITextView(おそらく他の何かによって保持されている)が割り当て解除されたコントローラーにコールバックしようとしてクラッシュします。を呼び出すとresignFirstResponder、これが発生する順序が逆になるため、クラッシュは発生しません。

textView.delegate = nilビューコントローラのメソッドに呼び出しを追加するためのこれを回避するdealloc方法-明らかに、テキストビューを解放する前に呼び出しを配置し​​ます。

于 2011-06-18T23:48:16.370 に答える
1

UITextViewとそのデリゲートの間のコントラクトは、テキストビューの編集が完了すると、デリゲートが-resignFirstResponderを送信することを示しています。これにより、ビューの編集が完了したことがフレームワークに通知され、それに関連するイベント(willEndEditingおよびdidEndEditing)が発生し、レスポンダー階層の他の部分がそれに応じて反応できるようになります。そうしないとうまくいくかもしれませんが、それは合意した契約に従っていません(それがすべてのプロトコルです)。

于 2011-06-24T20:32:38.713 に答える
1

XcodeサンプルUICatalogUITextFieldresignFirstResponderは、ポップされる前に呼び出さないため、そうする必要はないと思いますTextViewController

キーボードが動かなくなったのは、同じビューコントローラーに2つのビューコントローラーを同時にモーダルに次々と表示させていたためです。UIKitそれが気に入らなかった。

于 2011-06-25T19:24:58.023 に答える
0

呼び出すと、プロパティにコントロールに表示される実際のテキストが含まれてresignFirstResponderいることを確認します。text

状態によっては、これは必ずしも必要ではありませんが、コントロールがファーストレスポンダーを辞任した場合は、有効なデータを使用していることがわかります。

于 2011-06-19T10:57:24.497 に答える