Реализовать UISearchController в UITableView Objective-C

Я следую этому руководству, чтобы внедрить UISearchController в свой проект: http://useyourloaf.com/blog/updating-to-the-ios-8-search-controller.html

Мне удалось найти устаревший метод (searchDisplayController), но я хотел бы реализовать UISearchController.

Ну, на мой взгляд, я реализовал DidLoad:

//UISearchController
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.searchBar.delegate = self;
self.tableView.tableHeaderView = self.searchController.searchBar;
self.searchController.searchBar.scopeButtonTitles = @[];
self.definesPresentationContext = YES;
[self.searchController.searchBar sizeToFit];

В моем numberOfRowsInSection я оставил свой старый код для searchDisplayController :

if (table == self.searchDisplayController.searchResultsTableView)
{
    return [self.searchResults count];
}
else
{
    return [self.allUsers count];
}

In my cellForRowAtIndexPath :

NSArray *sourceData = (tableView == self.searchDisplayController.searchResultsTableView ? self.searchResults : self.allUsers);
PFUser *selected = [sourceData objectAtIndex:indexPath.row];
NSString *name = [[sourceData objectAtIndex:indexPath.row] valueForKey:@"surname"];
cell.textLabel.text = name;

и добавил эти методы:

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController
{
    NSString *searchString = searchController.searchBar.text;
    [self searchForText:searchString];
    [self.tableView reloadData];
    NSLog(@"updateSearchResultsForSearchController");
}

- (void)searchForText:(NSString*)searchText
{
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"surname contains[c] %@", searchText];
    self.searchResults = [self.allUsers filteredArrayUsingPredicate:predicate];

}

- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope
{
    [self updateSearchResultsForSearchController:self.searchController];
}

Ну, когда я нажимаю на строку поиска и нажимаю на некоторые слова, появляется журнал updateSearchResultsForSearchController. Но человек, которого я ищу, не появляется. Я не знаю, что мне нужно реализовать, чтобы это работало? Может быть, мой метод searchForText:searchString не подходит?

Или, может быть, мне нужно что-то добавить в мои cellForRowAtIndexPath и numberOfRowsInSection?


person Vjardel    schedule 25.09.2015    source источник


Ответы (1)


Во-первых, вы должны проверить self.searchResults.count. Если self.searchResults.count > 0, метод searchForText:searchString правильный. Итак, вы проверяете проблему в tableView.

person nynohu    schedule 25.09.2015
comment
Спасибо за ответ ! Где я должен проверить, если self.searchResults.count › 0 ? это не работает в cellForRow (никогда › 0) - person Vjardel; 25.09.2015
comment
Вы можете проверить после строки «self.searchResults = [self.allUsers filteredArrayUsingPredicate: predicate];». Убедитесь, что ввод текста содержится в файле self.allUsers. - person nynohu; 25.09.2015
comment
Решено !!!! Спасибо, я изменил свой cellForRow с условием if: self.searchResults.count › 0, то же самое для numberOfRowsInSection! :) - person Vjardel; 25.09.2015