Cocoaの日々: UISearchDisplayController で用意される UITableView を扱う上での注意点
self.tableView
検索実行中は UITableViewController の self.tableView が UITableView から UISearchResultsTableView に変わる。この為、self.tableView を使う場合はどちらのビューなのかを意識する必要がある。例えば、-[UITableView indexPathForCell:] を使って UITableViewCell から NSIndexPath を取得する場合など。この場合、UISearchResultsTableView に載っている UITableViewCell を UITableViewの方へ渡しても正しい結果が得られない。
[例] UITableCell* cell = ... // UISearchResultsTableView上の UITableViewCell NSIndexPath* indexPath = [self.tableView indexPathForCell:cell];該当する UITableViewCell が self.tableViewには無いため indexPath は nil となる。
UITableView と UISearchResultsTableView の使い分け
この問題を回避する為に self.tableView を使わずに検索状態によって UITableView と UISearchResultsTableView を使い分ける必要がある。こんな感じ。
[例] UITableView* tableView = nil; if (self.searchDisplayController.active) { tableView = self.searchDisplayController.searchResultsTableView; } else { tableView = self.tableView; }検索中の時は activeプロパティが有効になる。また、UISearchResultsTableView は UISearchDisplayController から取得できる。
参考情報
UISearchDisplayController Class Reference
Responses
Leave a Response