我在InterfaceBuilder的UITableViewController中添加了一個UISearchDisplayController。通過添加一個searchBar: searchBar textDidChange: searchText
方法來重新生成表格的數據數組,並調用reloadData
,這很容易實現。如何使用UISearchDisplayController預加載或初始化搜索?
但是我希望在用戶下一次觸摸搜索欄時顯示上一個搜索結果,因爲觸摸(X)並清除它比再次輸入它更容易。但我無法做到這一點。下面是我試過的代碼:
- (void) searchBar: (UISearchBar *) searchBar textDidChange: (NSString *) searchText {
if(searchText && [searchText length] > 0) {
self.displayedRows = [[NSMutableArray initWithCapacity: 1];
for(NSString *l in self.allRows) {
NSRange r = [l rangeOfString: searchText];
if(r.location != NSNotFound)
[self.displayedRows addObject: l];
}
[self.searchDisplayController.searchResultsTableView reloadData];
}
}
- (void) searchDisplayControllerWillBeginSearch: (UISearchDisplayController *) controller {
if(self.lastSearch && [self.lastSearch length] > 0) {
controller.searchBar.text = self.lastSearch;
[controller.searchResultsTableView reloadData];
}
}
- (void) searchDisplayControllerWillEndSearch: (UISearchDisplayController *) controller {
self.lastSearch = controller.searchBar.text;
self.displayedRows = self.allRows;
[self.tableView reloadData];
}
最後搜索文本是適當的搜索欄下一次我接觸到的搜索,我很驚訝的是,「光標」甚至在位於端部,但搜索結果不會顯示,只是原始內容的黑暗視圖(例如搜索字段爲空)。只要我輸入一個字符,搜索結果就會被更新。
我試圖把的[self.searchDisplayController.searchResultsTableView reloadData]
等效到每個:
searchDisplayControllerDidBeginSearch: (UISearchDisplayController *) controller
searchDisplayController: (UISearchDisplayController *) controller didLoadSearchResultsTableView: (UITableView *) tableView
searchDisplayController: (UISearchDisplayController *) controller willShowSearchResultsTableView: (UITableView *) tableView
searchDisplayController: (UISearchDisplayController *) controller didShowSearchResultsTableView: (UITableView *) tableView
但它並沒有區別......只是空白,直到我輸入一些東西。
有沒有人有任何想法如何獲得預加載的搜索結果?
令人驚訝的是,我以爲我試過了所有不同的willBegins和didBegins的所有可能的組合,但我只是移動`reloadData`部分,因爲之前的搜索測試總是在搜索字段中。 – LavaSlider 2011-02-03 02:13:08