リモートサーバーからデータを検索するために使用されるモーダルウィンドウがあります。ウィンドウのナビゲーションバーのtitleControlとしてUITextFieldがあり、ウィンドウを埋めるテーブルビューがあります(結果が明らかに表示されます)。ここで私がしたいことは、ユーザーがテーブルビューをスクロールしたときに、すぐにテキストフィールドのフォーカスを失い (ファーストレスポンダを辞任する)、キーボードが消え、ユーザーがテーブルビューをスクロールする余地が増えることです (残ったギャップを埋めるために下に伸びます)キーボードで)。UISearchDisplayController (またはそれが呼ばれるもの) を使用する場合と基本的に同じ機能です。
だから私はテーブルビューのスクロールイベントを検出するためのこのコードを持っています:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
[searchField resignFirstResponder];
}
これはうまくいきます。ただし、問題は、ユーザーがテーブルをスクロールしてテキストフィールドがフォーカスを失うと、もう一度タップしてもフォーカスを戻すことができないことです。したがって、基本的に一度呼び出すと[resignFirstResponser]
、キーボードを元に戻してテキストフィールドの値を編集することはできなくなります。誰でも理由がわかりますか?[becomeFirstResponder]
どこかでフィールドを明示的に呼び出す必要がありますか? フィールドがタップされたときに自動的に処理されると思ったからですか?
また[becomeFirstResponder]
、モーダルウィンドウが最初に呼び出されたときにテキストフィールドを呼び出しているため、フィールドは事前にフォーカスされています。それと何か関係があるのでしょうか?
誰かが望むならもっと多くのコードを投稿できますが、私はテキストフィールドで異常なことをしているとは思いません。
助けてくれてありがとう!