Я следую за этот учебник, чтобы реализовать UISearchController
в моем проекте: http://useyourloaf.com/blog/updating-to-the-ios-8-search-controller.htmlРеализовать UISearchController в UITableView Objective-C
мне удалось найти с уходящим методом (searchDisplayController
), но я хотел бы реализовать UISearchController
.
Ну, в моем viewDidLoad я реализовал:
//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];
}
В моих 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
?
Спасибо за ответ! Где я должен проверить, если self.searchResults.count> 0? что не работает в cellForRow (никогда> 0) – Viny76
Вы можете проверить после строки 'self.searchResults = [self.allUsers filterArrayUsingPredicate: predicate];'. Убедитесь, что текстовый ввод содержится в вашем self.allUsers. – nynohu
Решенный !!!! Спасибо, я изменил cellForRow с условием: self.searchResults.count> 0, idem для numberOfRowsInSection! :) – Viny76