實現UISearchController我下面這個教程在我的項目實施UISearchController
:http://useyourloaf.com/blog/updating-to-the-ios-8-search-controller.html在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 filteredArrayUsingPredicate:predicate];'之後檢查。確保文本輸入包含在self.allUsers中。 – nynohu
解決!!!!謝謝,我改變了我的cellForRow與條件:self.searchResults.count> 0,同上numberOfRowsInSection! :) – Viny76