таблица результатов поиска не отображает содержимое своих ячеек, даже если фильтрация содержимого таблицы работает нормально

#iphone #uitableview #ios7 #uisearchbar #uisearchdisplaycontroller

#iPhone #uitableview #ios7 #панель пользовательского поиска #uisearchdisplaycontroller

Вопрос:

у меня есть viewcontroller, содержащий несколько tableviews, управляемых одним и тем же viewcontroller.я добавил поиск к одному из tableviews… я добавил панель поиска amd searchisplaycontroller и подключил выходы для searchdelegate, searchdatasource, searchbar.и т.д… изображение, показывающее просмотры в vc в раскадровке

у меня есть код для фильтрации содержимого таблицы, работающий правильно…

ниже приведен код внутри метода cellforrowatindexpath

  static NSString *simpleTableIdentifier = @"search";

        SearchFieldsCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

        if (cell == nil) {
            cell = [[SearchFieldsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
        }
        NSDictionary *field=nil;


        if (tableView == self.searchDisplayController.searchResultsTableView) {

            field =  _searchfieldsArray[indexPath.row];
        }
        else{
             field = _fieldsArray[indexPath.row];
        }


        cell.titleLabel.text=field[@"a"];
        cell.subtitleLabel.text=field[@"b"];
        cell.detailLabel.text=field[@"c"];



        cell.flagImage.image=[UIImage imageNamed:@"ic_flag.png"];
         return cell;
 

но он не отображает содержимое tableview … даже высота tableviewcell установлена и во время выполнения … если я дам printobject, например, po cell.titlelabel.text, в консоли отладки это дает результат, подобный

 <UILabel: 0xc15d500; frame = (70 0; 241 21); text = 'result'; userInteractionEnabled = NO; layer = <CALayer: 0xc15d5b0>>
 

далее я обнаружил, что строка кода
SearchFieldsCell *cell=[tableViewdequeueReusableCellWithIdentifier:simpleTableIdentifier];

отлично работает, т.Е. загружает ячейки прототипа из раскадровки, но строка

 if (cell == nil) {
                cell = [[SearchFieldsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
            }
 

возвращает пустые белые ячейки, которые каким-то образом не загружаются из ячеек прототипа из раскадровки… как это может произойти …?? кто-нибудь, пожалуйста, помогите…

Комментарии:

1. Используете ли вы ячейку прототипа или пользовательскую ячейку, как вы упомянули — SearchFieldsCell ??

2. прототип ячейки в раскадровке… пользовательский класс для него — SearchFieldsCell

Ответ №1:

Попробуйте ввести приведенную ячейку с пользовательским классом ячейки. Таким образом, он будет инициализироваться и не будет иметь нулевое значение.

 SearchFieldsCell *cell = (SearchFieldsCell *)[tableView dequeueReusableCellWithIdentifier: simpleTableIdentifier];
 

Надеюсь, это вам поможет.

Спасибо.

Комментарии:

1. привет, я пробовал это, но не сработало … как-то только в таблице поиска searchdisplaycontroller ячейки становятся пустыми

Ответ №2:

я знаю, что это сделано не так … но после стольких разных способов решением было создать пользовательский файл xib и заставить uisearchresultscontrollers tableview зарегистрировать этот файл nib. это сработало

  [self.searchDisplayController.searchResultsTableView registerNib:[UINib nibWithNibName:@"SearchFieldsCell"
                                                  bundle:[NSBundle mainBundle]]
            forCellReuseIdentifier:@"Search"];