[問題] UISearchDisplayDelegate
遇到一個關於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)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 4 篇):