我在界面构建器中有一个带有4个预定义单元格的静态表视图。包含此静态tableview的tableviewcontroller的searchcontroller具有完全不同的数据源 - 也就是说,用户正在搜索的数据不在这4个静态单元格中。
之前,对于现已弃用的UISearchDisplayController
,我可以这样做:
self.searchDisplayController.searchResultsDataSource = _searchResultsController;
self.searchDisplayController.searchResultsDelegate = _searchResultsController;
使用_searchResultsController
实现tableview数据方法。我现在正在尝试向searchresultscontroller添加一个staticTableView
属性,除非它没有通过,我不确定我应该怎么做。
OriginalTableViewController.m
- (void)viewDidLoad {
_searchResultsController = [CustomSearchResultsController new];
self.searchResultsController.originalTableViewController = self;
self.searchResultsController.searchController = self.searchController;
self.searchResultsController.staticTableView = self.tableView;
self.tableView.dataSource = _searchResultsController;
self.tableView.delegate = _searchResultsController;
[self.tableView reloadData];
}
CustomSearchController.m
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (self.searchController.isActive) {
return self.searchResults.count;
} else {
return [self.staticTableView numberOfRowsInSection:0];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (self.searchController.isActive) {
// do some stuff with the separate data source
return cell;
} else {
return [self.staticTableView cellForRowAtIndexPath:indexPath];
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (self.searchController.isActive) {
// do some stuff with the separate data srouce
} else {
[self.originalTableViewController tableView:tableView didSelectRowAtIndexPath:indexPath];
}
}
当前在numberOfRowsInSection
上崩溃,计数为0.即使我手动对return 4;
进行硬编码,它仍会崩溃并说它无法从其数据源获取单元格。
我错过了什么吗?这是做这种事情的理想方式吗?任何见解都将不胜感激。
答案 0 :(得分:1)
如果您使用UISearchController
创建resultsController
,请使用初始化:
searchController = UISearchController(searchResultsController: resultsController)
UISearchController
将自动处理从静态表视图控制器到resultsController
的切换 - 因此resultsController
只需要处理显示搜索结果,而不是静态单元格。