Я пытаюсь добавить строку поиска для поиска через мой tableView. Существует только один TableViewController, в который добавлен searchBar. Я проверил все существующие руководства и примеры кода Apple и выполнил инструкции, но почему-то мой tableView не перезагружается после ввода строки поиска. Я проверил свои коды с NSLog, и я уверен, что текст поиска правильно загружен, и новый массив фильтруется с помощью NSPredicate. Я добавил [self.tableView reloadData] в конце метода updateSearchResultsForSearchController :, но все же мой tableViewController не обновляется. Я новичок в программировании на iOS и не уверен, что я делаю неправильно. Оцените, можете ли вы быстро взглянуть на мои коды и обратную связь ко мне. Вот резюме:использование UISearchController, но tableView не перезагружается
@property (nonatomic,strong) UISearchController *searchController;
@property (nonatomic,strong) NSArray *myList; //original data list
@property (nonatomic,strong) NSArray *mysearchResult; //filtered list
- (void)viewDidLoad {
[super viewDidLoad];
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.definesPresentationContext=YES;
[self.searchController.searchBar sizeToFit];
}
-(void)updateSearchResultsForSearchController:(UISearchController *)searchController {
NSString *searchString=self.searchController.searchBar.text;
NSPredicate *mypredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", searchString];
self.mysearchResult=[self.myList filteredArrayUsingPredicate:mypredicate];
[self.tableView reloadData];
}
"CellForRowAtIndexPath" Метод для кодов Tableview: (аналогично "numberOfRowsInSection" обновляется)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyCustomCell codes.....
if (tableView==self.tableView) {
cell.cellLabel.text=[self.myList objectAtIndex:indexPath.row];
} else
cell.cellLabel.text=[self.mysearchResult objectAtIndex:indexPath.row];
return cell;
}
ли вы назначить DataSource tabeView и делегировать? – curious
У вас есть только один TableView? Если так, ваше условие if всегда будет истинным. и ваши данные всегда загружаются из self.myList. Решение представлено ниже. –