我在 InterfaceBuilder 的 UITableViewController 中添加了一个 UISearchDisplayController。通过添加一个searchBar: searchBar textDidChange: searchText
为表重新生成数据数组并调用reloadData
.
但是我希望用户下次在搜索栏中触摸时显示以前的搜索,因为触摸(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
但它没有任何区别......只是空白,直到我输入一些东西。
有谁知道如何获得预加载的搜索结果?