#iphone #uitableview #uisearchbar #reload
#iPhone #uitableview #панель пользовательского поиска #перезагрузите
Вопрос:
Хорошо, итак, я работаю над внедрением UISearchBar в TableView, в котором есть разделы. Это может быть неправильно, но для заполнения табличного представления в первый раз у меня есть массив с большим количеством записей, а затем заполнить разделы следующим образом:
if(indexPath.section ==0){
[cell.textLabel setText:[tableData objectAtIndex:indexPath.row]];
}else if(indexPath.section ==1){
[cell.textLabel setText:[tableData objectAtIndex:indexPath.row 4]];
}else if(indexPath.section ==2){
[cell.textLabel setText:[tableData objectAtIndex:indexPath.row 8]];
}
Это далеко не элегантно, но это работает. Сейчас я пытаюсь подключить UISearchBar, и с этим методом у меня возникают проблемы:
- (void)searchBar:(UISearchBar *)sBar textDidChange:(NSString *)searchText
{
[tableData removeAllObjects];// remove all data that belongs to previous search
if([searchText isEqualToString:@""] || searchText==nil){
[tableView reloadData];
return;
}
NSInteger counter = 0;
for(NSString *name in dataSource)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
NSRange r = [name rangeOfString:searchText];
if(r.location != NSNotFound)
{
[tableData addObject:name];
}
[pool release];
}
[tableView reloadData];
}
Итак, я снова создаю массив записей, которые соответствуют критериям поиска, но затем, когда я пытаюсь перезагрузить свой TableView, все становится запутанным, потому что ожидаются разделы. Но все, что я хочу, это результаты в виде простого TableView без разделов.
Как я могу реализовать эту панель пользовательского поиска с помощью TableView с разделами?
Спасибо
Комментарии:
1. Сохраняйте разные массивы для разных разделов.
Ответ №1:
установите BOOL при вводе поиска и соответствующим образом отрегулируйте количество разделов
например
в viewDidLoad
BOOL isSearching = NO;
установите значение «ДА» при вводе метода textDidChange.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
int t;
if (isSearching) t = 1
else {
t= array.count;
}
return t;
}
Ответ №2:
Вам не нужно сохранять другую переменную; просто опросите tableView
аргумент, чтобы увидеть, кто запрашивает количество разделов. Например, предположим, что ваши данные доступны в fetchedResultsController
:
if (tableView == self.searchDisplayDisplayController.searchResultsTableView) {
// your table is the search results table, so just return 1
return 1;
} else {
// your table is your "own" table
return [[self.fetchedResultsController sections] count];
}
Я делаю то же самое во многих моих методах делегирования табличного представления и источника данных.