2

Weather アプリの動作をエミュレートするモーダル検索ビューの作成に問題があります。具体的には、私を悩ませ、不要な 0.2 秒の遅延をもたらす 2 つのアニメーションがあります。

  • モーダル ビューが表示されるようになったら、UISearchDisplayController.searchBarbecomeFirstResponder を呼び出して にフォーカスを移しviewDidAppearます。ただし、モーダル ビューがスライド インするとキーボードは表示されませんが、モーダル ビューの遷移のアニメーションが完了した後、スライド インするにはさらに 0.2 秒必要です。呼び出しを別のコールバックに移動しviewWillAppearたり、viewDidLoadうまくいかなかったりすると、そもそもキーボードが表示されません。

  • ユーザーがキャンセルにタッチすると、デリゲートのsearchDisplayControllerDidEndSearchメソッドが呼び出される前に別のアニメーションが発生し、検索テキスト フィールドが展開されてボタンが「溶けて」しまいます。繰り返しますが、ボタンがタッチされるとモーダル ビューが遷移するはずなので、このアニメーションは不要です。

  • さらに、同じビューを閉じて再表示すると、遷移後にキーボードがスライドするだけでなく、キャンセル ボタンも同じように (幸運にも同時に) スライドします。

ここで説明されている同様の問題を認識しています: Modal View Controller 内で becomeFirstResponder を呼び出すときのキーボード アニメーションの問題。ただし、検索バーの動作はテキスト フィールドの動作とは少し異なるようです。を呼び出してキーボードを表示するために、その作成者が説明した手順を再現できませんでしbecomeFirstResponderviewDidLoad

よろしく、クリス

4

1 に答える 1

1

私はあなたの答えを見つけたと思います。Interface Builder を使用して検索バーを追加する場合、「検索バー」と「検索バーと検索表示コントローラー」の 2 つの方法があります。

私は2番目を使用していて、あなたが説明したのとまったく同じ問題を抱えていました。「viewDidAppear」でキーボードを呼び出すことしかできませんでした (becomeFirstResponder を使用)。ただし、検索バーだけを追加すると機能します。これで、"viewDidLoad" で becomeFirstResponder を呼び出すことができ、キーボードがビュー自体と共に表示されます。

私はもう少し仕事を意味しますが、実際にはそれほど多くはありません。コントローラーを検索バーのデリゲートに設定する必要があります。結果のリスト ビューを追加し、コントローラーをデリゲートとデータソースにしました。

于 2012-08-03T22:00:02.827 に答える