我知道Apple弃用旧的搜索显示控制器。我有一个包含数据的表格,我只是创建一个搜索栏,允许用户使用搜索栏从表格视图中搜索数据(此数据仅包含字母名称)。我试图在一个点上使用以下代码来检测用户是否正在输入内容:
if(tableView == self.searchDisplayController.searchResultsTableView)
但我不能,因为苹果已经弃用旧的方式。我知道我现在必须使用UISearchController,我已经查看了Apple的文档和它们提供的示例代码,但我无法理解它。我到处寻找,但没有找到关于如何使用objective-c执行此操作的可靠示例/教程。任何人都可以解释我们如何将tableview与UISearchController结合使用以允许用户搜索数据?
答案 0 :(得分:1)
我有一个简单的演示项目here
你需要一个TableviewController来显示数据,一个TableviewController来显示searchResult
例如,(链接中来自演示项目的代码)
声明SearchResultViewController
@interface SearchResultViewController : UITableViewController
然后在主表视图中
@interface SearchTableViewController()<UISearchBarDelegate,UISearchResultsUpdating>
@property (strong,nonatomic)NSMutableArray * dataArray;
@property (strong,nonatomic)UISearchController * searchcontroller;
@property (strong,nonatomic)SearchResultViewController * resultViewController;
@end
在viewDidLoad中,设置所有内容
self.resultViewController = [[SearchResultViewController alloc] init];
self.searchcontroller = [[UISearchController alloc] initWithSearchResultsController:self.resultViewController];
self.searchcontroller.searchBar.delegate = self;
self.resultViewController.tableView.delegate = self;
[self.searchcontroller.searchBar sizeToFit];
self.searchcontroller.searchResultsUpdater = self;
self.searchcontroller.dimsBackgroundDuringPresentation = NO;
self.definesPresentationContext = YES;
self.tableView.tableHeaderView = self.searchcontroller.searchBar;
然后在委托方法中,进行实际搜索并更新searchResultViewController
#pragma mark - search bar delegate
-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
[searchBar resignFirstResponder];
}
#pragma mark - UISearchResultUpdating
//Do real search,this is up to you
-(void)updateSearchResultsForSearchController:(UISearchController *)searchController{
NSString * searchtext = searchController.searchBar.text;
NSArray * searchResults = [self.dataArray filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
BOOL result = NO;
if ([(NSString *)evaluatedObject hasPrefix:searchtext]) {
result = YES;
}
return result;
}]];
SearchResultViewController *tableController = (SearchResultViewController *)self.searchcontroller.searchResultsController;
tableController.dataArray = searchResults;
[tableController.tableView reloadData];
}