In iOS 8, UISearchDisplayController has been deprecated in favour of using UISearchController instead.
The interface of UISearchController works quite differently: it takes a result view, as well as a so called id <UISearchResultsUpdating> delegate to let the user have a chance of updating the UI.
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController;
I thought TLTableViewController's automatic table updates would provide a perfect drop-in implementation of this method. All one needs to do is update the data model:
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
NSString *searchText = searchController.searchBar.text;
// ... Create a new array-based data model based on the search text.
TLIndexPathDataModel *dataModel = f(searchText);
self.indexPathController.dataModel = dataModel; // implicitly calls `performUpdates... on table view`
}
However, surprisingly, this does not actually work. The UI of the table view doesn't get updated with the latest rows.
I'm using ignoreDataModelUpdates = YES and an explicit [tableView reloadData] to workaround this for the time being.
In iOS 8,
UISearchDisplayControllerhas been deprecated in favour of usingUISearchControllerinstead.The interface of
UISearchControllerworks quite differently: it takes a result view, as well as a so calledid <UISearchResultsUpdating>delegate to let the user have a chance of updating the UI.- (void)updateSearchResultsForSearchController:(UISearchController *)searchController;I thought
TLTableViewController's automatic table updates would provide a perfect drop-in implementation of this method. All one needs to do is update the data model:However, surprisingly, this does not actually work. The UI of the table view doesn't get updated with the latest rows.
I'm using
ignoreDataModelUpdates = YESand an explicit[tableView reloadData]to workaround this for the time being.