0

Я следую за этот учебник, чтобы реализовать 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?

ответ

1

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

+0

Спасибо за ответ! Где я должен проверить, если self.searchResults.count> 0? что не работает в cellForRow (никогда> 0) – Viny76

+0

Вы можете проверить после строки 'self.searchResults = [self.allUsers filterArrayUsingPredicate: predicate];'. Убедитесь, что текстовый ввод содержится в вашем self.allUsers. – nynohu

+0

Решенный !!!! Спасибо, я изменил cellForRow с условием: self.searchResults.count> 0, idem для numberOfRowsInSection! :) – Viny76

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