2015-12-30 6 views
0

У меня есть статическое представление таблицы с 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;, он все равно будет врезаться и говорят, что он не смог получить ячейку из своего источника данных.

Я что-то упустил? Это идеальный способ заниматься такими вещами? Любое понимание было бы оценено.

+0

Вы пытаетесь показать результаты поиска * и * статические ячейки или результаты поиска * вместо * статических ячеек? – pbasdf

+0

Показать результаты поиска при поиске, а затем, когда searchcontroller неактивен, снова покажите статические ячейки. –

+0

Если вы создаете UISearchController с помощью обработчика результатов, UISearchController будет автоматически переключаться с статического tableViewController на resultController - так что обработчик resultsController должен обрабатывать отображение результатов поиска, а не статических ячеек. – pbasdf

ответ

1

Если вы создаете UISearchController с resultsController, используя Инициализатор:

searchController = UISearchController(searchResultsController: resultsController) 

UISearchController будет обрабатывать переключение с вашего статическим контроллера табличных к resultsController автоматически - так resultsController только нужно обрабатывать отображение поиска результаты, а не статические ячейки.

Смежные вопросы