SwiftKickMobile / TLIndexPathTools

TLIndexPathTools is a small set of classes that can greatly simplify your table and collection views.
tlindexpathtools.com
MIT License
347 stars 60 forks source link

Compatibility with UISearchController [Xcode 6 beta 5] #33

Open fatuhoku opened 10 years ago

fatuhoku commented 10 years ago

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.

wtmoose commented 10 years ago

If you provide a sample project, I'll take a look.

Tim

Sent from my phone.

On Aug 9, 2014, at 3:57 AM, Hok Shun Poon notifications@github.com wrote:

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 delegate to let the user have a chance of updating the UI.

  • (void)updateSearchResultsForSearchController:(UISearchController *)searchController; I thought TLTableViewController would be a perfect drop-in implementation of this method:

(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.

— Reply to this email directly or view it on GitHub.