Я написал простое приложение диспетчера контактов, которое использует 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
должно быть что-то очень тонкое, но мне не хватает этого.