4

Apple のサンプル iOS プロジェクトTableSearchのコードを変更して、コンテンツを解析して Web サービスを検索するために使用します。私が実装したものはすべて、SearchDisplayController の SearchBar を使用して検索を実行するときの 1 つの醜い詳細を除いて、正常に機能します。「検索」ボタンがタップされたときに最初に検索機能を呼び出すように、SearchDisplayController の動作を変更しました。

問題は、検索の反復 (NSOperationQueue でバックグラウンドで実行される) が終了したときに、(searchDisplayController の)「searchResultsTableView」が自動的に表示されないか、結果のコンテンツが割り当てられないことです。その後、SearchBar のテキストを変更するか、検索フィールドに触れたときに表示されるビューから [キャンセル] ボタンをタップすると (TableSearch を参照)、正しい TableView が検索結果とともに表示されます。このステップは、検索操作が終了した直後、つまり対話する前に実行したいだけです。この段階では、「No Results」ラベルが現在表示されています。メソッド「filterContentForSearchText」および「shouldReloadTableForSearchString」は、元の TableSearch プロジェクトから変更されていません。

SearchDisplayController とその属性のさまざまなクラス参照を調べましたが、最終的な解決策はまだ見つかりませんでした。

NSOperation が終了した後に確実に繰り返されるセクションで次のことを試しましたが、問題は解決していないようです。

[self.searchDisplayController.searchResultsTableView removeFromSuperview];

self.searchDisplayController.searchResultsTableView.hidden = YES;

これらの操作は両方とも、表示したい正しいビューを持っていますが、ビューが再び非表示になるように状態を変更するまで、スクロールは無効になります。ただし、TableView セルを選択することは可能です。私は基本的にスクロールを有効にしてこれを持ちたい...

よろしくお願いいたします。

4

2 に答える 2

16

私は同じ問題を抱えており、それを解決しました。まったく同じ問題が発生しました。インスタント検索を無効にしたいのですが、検索ボタンを押すとテーブルが読み込まれませんでしたが、[キャンセル]をクリックすると読み込まれました。また、検索後に正しい結果が読み込まれなかったテーブルビューをスクロールすると、インデックスが範囲外であるためにクラッシュしました。

あなたがする必要があるのは、現在のテーブルビューではなく、searchResultTableViewをリロードすることです。検索語でデータを除外した後、

[self.searchDisplayController.searchResultsTableView reloadData]

検索結果をリロードします。検索ボタンを押すと表示されます。この助けを願っています

于 2011-04-17T05:31:09.633 に答える
0

searchBar.text を設定すると、searchDisplayController.searchResultsTableView が self.view に追加されることがわかりました。次のように解決します。

self.searchBar.text = @"xxxx";
[self.searchDisplayController.searchResultsTableView removeFromSuperview];
于 2011-09-20T04:42:06.627 に答える