同一の s + sをUITabBarController
含む 4 つのタブがあります。それぞれにandがあり、すべてのデリゲート メソッドを実装します。まず、任意のタブをクリックし、検索バーをタップしてテキストを入力し、検索を押します。View Controllerが最前面のテーブルビューをどのように認識しているかを確認するために、ログを内部に配置しました(今のところ、結果はゼロです)。UINavigationController
UITableViewController
UISearchBar
UISearchDisplayController
numberOfSectionsInTableView
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
if (tableView == self.searchDisplayController.searchResultsTableView) {
NSLog(@"Search Controller is the current table view");
return 0;
} else
NSLog(@"Search Controller is not the current table view");
return self.itemSections.count;
}
今回は、最初のステートメントがコンソールに出力されます。
次に、(検索コントローラーを閉じずに) タブを変更し、すぐに最初のタブ (検索コントローラーを使用) に戻ります。検索コントローラーは依然として最前面のビューですが、2 番目のログ ステートメントは他のステートメントではなく出力されます。
私が変更した場合:
if (tableView == self.searchDisplayController.searchResultsTableView)
に:
if (tableView == self.searchDisplayController.searchResultsTableView || self.searchDisplayController.isActive)
次に、新しい if ステートメントの 2 番目の基準により、コントローラーは本来あるべき動作をすることができます。私の質問はtableView
、メソッドがアクティブなときとnumberOfSectionsInTableView
等しくないのはなぜですか?self.searchDisplayController.searchResultsTableView
self.searchDisplayController