1

Я знаю, что Apple устарела от старого контроллера отображения поиска. У меня есть таблица с данными, и я просто создаю панель поиска, которая позволит пользователю искать данные (эти данные содержат только алфавитные имена) из представления таблицы с помощью строки поиска. Я пытался использовать следующий код в одном месте, чтобы обнаружить, если пользователь вводит что-то:Использование UISearchController для поиска TableView

if(tableView == self.searchDisplayController.searchResultsTableView) 

Но я не могу, потому что Яблоко осуждал старый путь. Я понимаю, что теперь я должен использовать UISearchController, и я просмотрел документацию Apple и код кода, который они предоставляют, но я не смог ее понять. Я искал повсюду, но не нашел твердых примеров/учебников о том, как это сделать с объективом-c. Может кто-нибудь объяснить, как мы используем tableview в сочетании с UISearchController, чтобы позволить пользователю выполнять поиск данных?

+0

[UICatalog] (https://developer.apple.com/library /ios/samplecode/UICatalog/Introduction/Intro.html) есть много примеров для реализации 'UISearchController' с использованием как Obj-C, так и Swift. –

ответ

1

У меня есть простой демонстрационный проект here

Вам нужен TableviewController для отображения данных, и TableviewController показать SEARCHRESULT

Например, (код из демонстрационного проекта в ссылке)

Declare SearchResultViewController

@interface SearchResultViewController : UITableViewController 

Затем в главном Tableview

@interface SearchTableViewController()<UISearchBarDelegate,UISearchResultsUpdating> 
@property (strong,nonatomic)NSMutableArray * dataArray; 
@property (strong,nonatomic)UISearchController * searchcontroller; 
@property (strong,nonatomic)SearchResultViewController * resultViewController; 
@end 

В viewDidLoad, установка все

self.resultViewController = [[SearchResultViewController alloc] init]; 
self.searchcontroller = [[UISearchController alloc] initWithSearchResultsController:self.resultViewController]; 
self.searchcontroller.searchBar.delegate = self; 
self.resultViewController.tableView.delegate = self; 
[self.searchcontroller.searchBar sizeToFit]; 
self.searchcontroller.searchResultsUpdater = self; 
self.searchcontroller.dimsBackgroundDuringPresentation = NO; 
self.definesPresentationContext = YES; 
self.tableView.tableHeaderView = self.searchcontroller.searchBar; 

Затем в методе делегата, сделать реальный поиск и обновление searchResultViewController

#pragma mark - search bar delegate 
-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{ 
    [searchBar resignFirstResponder]; 
} 
#pragma mark - UISearchResultUpdating 
//Do real search,this is up to you 
-(void)updateSearchResultsForSearchController:(UISearchController *)searchController{ 
    NSString * searchtext = searchController.searchBar.text; 
    NSArray * searchResults = [self.dataArray filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { 
     BOOL result = NO; 
     if ([(NSString *)evaluatedObject hasPrefix:searchtext]) { 
      result = YES; 
     } 
     return result; 
    }]]; 
    SearchResultViewController *tableController = (SearchResultViewController *)self.searchcontroller.searchResultsController; 
    tableController.dataArray = searchResults; 
    [tableController.tableView reloadData]; 

} 
+0

И когда я называю этот класс? Мой вид таблицы находится в моем ViewController.m. – Vimzy

+0

Вам просто нужно использовать searchBar, который предоставляет searchController, а затем вы можете получить действие в методе делегата. Затем измените searchResultController. Это логика – Leo