Как использовать UISearchBar с tableView, который имеет разделы - PullRequest
1 голос
/ 03 мая 2011

Хорошо, поэтому я работаю над реализацией 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.

Как я могу реализовать этот UISearchBar с tableView с разделами?

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 марта 2014

Вам не нужно хранить другую переменную;просто опросите аргумент 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];
   }

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

0 голосов
/ 06 мая 2011

установить BOOL при входе в поиск и соответственно отрегулировать количество разделов

, например

в viewDidLoad

 BOOL isSearching = NO;

устанавливается в YES при вводе метода textDidChange.

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    int t;
if (isSearching) t = 1
else {
t=  array.count;
}
return t;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...