Как использовать UISearchBar для пользовательских ячеек в UITableView - PullRequest
3 голосов
/ 03 октября 2011

Я заполняю свой просмотр таблицы из массива. И этот массив создается запросом SQLite.
Поэтому в моем массиве есть объекты из моего пользовательского класса.
И я использую пользовательские ячейки в моей таблице. Как object.name в одном слое, object.id возле этого слоя. Пока все хорошо. Но если я попытаюсь использовать UISearchBar, как я буду заново заполнять свою таблицу?

Это код, который я создаю для своей таблицы.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"SpeakersCell";

    SpeakersCell *cell = (SpeakersCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"SpeakersCell" owner:self options:nil];

        for (id currentObject in topLevelObjects) {
            if ([currentObject isKindOfClass:[SpeakersCell class]]) {
                cell = (SpeakersCell *) currentObject;
                break;
            }
        }
    }

    // Set up the cell
    ProjectAppDelegate *appDelegate = (ProjectAppDelegate *)[[UIApplication sharedApplication] delegate];
    Speaker *speakerObject = (Speaker *)[appDelegate.speakers objectAtIndex:indexPath.row];

    cell.lblSpeakerName.text = speaker.speakerName;
    cell.lblSpeakerCity.text = speaker.speakerCity;
    return cell;
}

Когда я добавляю строку поиска и определяю событие searchBar textDidChange, я успешно получаю элементы, содержащие ключевые буквы. Но я не могу заново заполнить свою таблицу, потому что я только искал названия предметов.

Учебники, по которым я получил помощь, построены на ячейках по умолчанию, а источником данных tableview является массив NSString. Но мой массив - это массив NSObject, это моя проблема.

Я рассматриваю получение индексов искомых элементов, но как я могу использовать эти значения? У вас есть идеи или какие-либо ссылки?

1 Ответ

1 голос
/ 03 октября 2011

Думаю, вам стоит взглянуть на блог Бобгрина, его урок мне очень помог.

http://www.cocoabob.net/?p=67

Проверьте его функцию удаления для UISearchDisplayController (который, я думаю, вы могли бы использовать?)

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
   [self.filteredListContent removeAllObjects];
    for (Product *product in listContent)
  {
    if ([scope isEqualToString:@"All"] || [product.type isEqualToString:scope])
     {
        NSComparisonResult result = [product.name compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
        if (result == NSOrderedSame)
        {
         [self.filteredListContent addObject:product];
         }
      }
   }
}

У него есть массив объектов NSObject (product), которые он перебирает. Каждый раз, когда результат соответствует поисковой строке, он помещает значение во второй массив с именем filteredListContent и отображает отфильтрованный контент. Работает как шарм для меня.

...