У меня есть статическое представление таблицы с 4 предопределенными ячейками в построителе интерфейса. Контроллер поиска для tableviewcontroller, который содержит это статическое табличное представление, имеет совершенно другой источник данных - то есть данные, которые пользователь ищет, не находятся в этих 4 статических ячейках.2 отдельных источника данных для UITableView/UISearchController
Раньше с ныне устаревшим UISearchDisplayController
, я мог бы просто сделать:
self.searchDisplayController.searchResultsDataSource = _searchResultsController;
self.searchDisplayController.searchResultsDelegate = _searchResultsController;
С _searchResultsController
реализации методов TableView данных. Теперь я пытаюсь добавить свойство staticTableView
в searchresultscontroller, за исключением того, что он не проходит, и я не уверен, как я должен это делать.
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;
, он все равно будет врезаться и говорят, что он не смог получить ячейку из своего источника данных.
Я что-то упустил? Это идеальный способ заниматься такими вещами? Любое понимание было бы оценено.
Вы пытаетесь показать результаты поиска * и * статические ячейки или результаты поиска * вместо * статических ячеек? – pbasdf
Показать результаты поиска при поиске, а затем, когда searchcontroller неактивен, снова покажите статические ячейки. –
Если вы создаете UISearchController с помощью обработчика результатов, UISearchController будет автоматически переключаться с статического tableViewController на resultController - так что обработчик resultsController должен обрабатывать отображение результатов поиска, а не статических ячеек. – pbasdf