Содержимое UITableViewCell contentView не отображается при использовании UISearchDisplayController - PullRequest
1 голос
/ 18 августа 2011

Я написал простое приложение диспетчера контактов, которое использует UITableView для отображения контактов.Каждый контакт отображается как стандарт UITableViewCell;Пользовательский контент создается как UIButtons и UILabels, которые добавляются как subviews из contentView ячейки.Метод viewController's cellForRowAtIndexPath для моей таблицы включает в себя:

UIButton *emailButton;
UITableViewCell *cell = 
        [theTableView dequeueReusableCellWithIdentifier:@"My Identifier"];
if (cell == nil) 
   {
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                    reuseIdentifier:identifier] autorelease];
     emailButton = [UIButton buttonWithType:UIButtonTypeCustom];
     [emailButton setImage:emailImage forState:UIControlStateNormal];
     emailButton.tag = EMAIL_BUTTON_TAG;
     emailButton.frame = emailButtonFrame;
     [cell.contentView addSubview:emailButton];
   } else {
     emailButton = (UIButton *)[cell viewWithTag:EMAIL_BUTTON_TAG];
   }
... set various attributes of the cell, including the content of custom labels
... added as subviews of the contentView exactly as above

Это прекрасно работает при рендеринге моей таблицы.Но я также добавил панель поиска в свое приложение, соответствующим образом установил контроллер панели поиска и установил для делегата controller's тот же самый tableController, чтобы при выполнении поиска вызывался точно такой же метод cellForRowAtIndexPath,и, конечно, я фильтрую набор ячеек, которые должны отображаться, чтобы соответствовать запросу.

Я вижу, что при выполнении поиска все содержимое, которое я отображаю, задает cell.textLabel.text или cell.imageView.imageотлично отображается в таблице, но emailButton или метки, которые я добавил как subviews из contentView ячейки, не отображаются.В отладчике я ясно вижу, что эти элементы управления (кнопки и метки) существуют во время вызова cellForRowAtIndexPath во время фильтрации поиска.Но элементы управления не отображаются.

Я чувствую, что во взаимодействиях между ячейками таблицы и searchView должно быть что-то очень тонкое, но мне не хватает этого.

Ответы [ 2 ]

2 голосов
/ 02 сентября 2011

Установка свойства textLabel text также выводит textLabel вперед.Даже если текстовая метка не перекрывается ни с одной из кнопок представления содержимого, это приводит к тому, что кнопки исчезают.Принудительное их выдвижение после при обновлении textLabel устраняет проблему.

Не ясно, почему это поведение появляется только в случае поиска, а не в обычном случае, ноЯ смог воспроизвести его, просто изменив пример iOS «TableSearch».

1 голос
/ 01 сентября 2011

Вы можете проверить, если

identifier in *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                    reuseIdentifier:identifier] autorelease];

равно «Мой идентификатор» от [theTableView dequeueReusableCellWithIdentifier:@"My Identifier"]; если нет, вы можете получить пустую ячейку, которую вы можете использовать как cell.imageView и cell.textLabel, но не имеет подпредставлений contentView.

...