作者leondemon (狗狗)
看板MacDev
标题[问题] UISearchDisplayDelegate
时间Wed Sep 12 21:37:15 2012
遇到一个关於UISearchDisplayController的问题 一直解不掉
所以想问问看板上有没有人有经验 :(
说明:
有一个tableView/tableViewController 上面有一个searchBar/searchDisplyController
不过由於searchBar所要找的资料 是跟原先tableView所呈现的资料是不一样的
因此我把searchBar/searchDisplyController 相关的delegation交给另外一个物件处理
// 在tableViewController.m 下
- (void) viewDidLoad{
id searchDelegate = [SearchDelegate new];
self.searchDisplayController.delegate = searchDelegate;
self.searchDisplayController.searchBar.delegate = searchDelegate;
self.searchDisplayController.searchResultsTableView.delegate =
searchDelegate;
self.searchDisplayController.searchResultsTableView.dataSource =
searchDelegate;
self.searchDelegate = searchDelegate; // hold this object.
}
因此searchBar所有活动 都交由searchDelegate处理
SearchDelegate实作所有protocol: <UISearchBarDelegate, UISearchDisplayDelegate,
UITableViewDataSource, UITableViewDelegate>
遭遇的问题:
第一次开启searchBar搜寻的时候 显示都很正常
但是如果我按下searchBar的cancel键 回到原本的tableView
然後再按一次searchBar回来时 dataSource的method完全都没有被invoked!!
我有尝试呼叫[searchDisplayController.searchResultsTableView reloadData]
但是data source methods 一样都没有被呼叫。
而且[searchDisplayController.searchResultsTableView numberOfSections]一直是0
(我data source的-numberOfSectionsInTableView: 都是回一个固定值)
我实在想不透为什麽会这样 =.=
基本上 我的data都没有变动 search时利用 -scrollToRowAtIndexPath: 跳到该项结果
可是一旦我离开一次searchBar後 再次回来 tableView就是不会去call data source...
不知道有没有人曾愈过这样的情形?
=============
自问自答 again:
後来发现到问题了 原本
self.searchDisplayController.searchResultsTableView.delegate =
searchDelegate;
self.searchDisplayController.searchResultsTableView.dataSource =
searchDelegate;
这两行 要改成
self.searchDisplayController.searchResultsDelegate = self.searchDelegate;
self.searchDisplayController.searchResultsDataSource = self.searchDelegate;
原因是取消了searchBar的搜寻之後,下一次再进来searchBar时
searchResultsTableView已经不是同一个tableView了 (虽然之前的tableView也还存在)
所以第二次进行search时 searchResultsTableView的delegate/dataSource已经换了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.80.235.156
※ 编辑: leondemon 来自: 60.198.45.233 (09/13 00:25)