UISearchDisplayController 利用時の注意点[2]

2010年8月2日月曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

以前、UISearchDisplayController を使う場合の注意点を書いた。その補足。

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

人気の投稿(過去 30日間)