Как использовать UISearchBar с TableView, содержащим разделы

#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];
   }
  

Я делаю то же самое во многих моих методах делегирования табличного представления и источника данных.