У меня есть пользовательский подкласс UITableViewCell
(реализация ниже), который не получает отмененный, когда после появления дочернего контроллера просмотра. Я не использую UITableViewController
. Я использую UIViewController
, чей вид содержит tableView.Почему мой пользовательский UITableViewCell остается выбранным после вызова deselectRowAtIndexPath?
Вот соответствующий viewWillAppear, который пытается отменить выбранную ячейку:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSIndexPath *selection = [self.tableView indexPathForSelectedRow];
if (selection) {
[self.tableView deselectRowAtIndexPath:selection animated:YES];
}
}
Я подтвердил, что self.tableView
не ноль, если приведенный выше код называется.
Пользовательские UITableViewCell
подкласс:
@implementation DSCaseCell
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
}
return self;
}
- (void)setStatus:(NSString *)status
{
_status = status;
self.statusLabelView.backgroundColor = [DSStyles colorForCaseStatus:self.status];
self.statusLabel.text = [self.status capitalizedString];
}
- (void)layoutSubviews
{
if ([self.status isEqualToString:DSInteractionClassFacebookComment]) {
self.iconView.image = [UIImage iconForInteractionClass:self.status];
} else {
self.iconView.image = [UIImage iconForInteractionClass:self.messageClass];
}
self.statusLabel.font = [DSStyles preferredFontForTextStyle:DSFontTextStyleCaption2];
self.statusLabelView.layer.cornerRadius = 3;
self.statusLabelView.backgroundColor = [DSStyles colorForCaseStatus:self.status];
self.statusLabel.text = [self.status capitalizedString];
self.statusLabel.textColor = [DSStyles invertedTextColor];
self.statusLabel.highlightedTextColor = [DSStyles invertedTextColor];
self.fromLabel.font = [DSStyles preferredFontForTextStyle:DSFontTextStyleLightCaption1];
self.timeLabel.font = [DSStyles preferredFontForTextStyle:DSFontTextStyleLightCaption1];
self.descriptionLabel.font = [DSStyles preferredFontForTextStyle:DSFontTextStyleLightCaption1];
[super layoutSubviews];
}
@end
Является ли indexPathForSelectedRow возвращением не-nil в viewWillAppear? –
Да, это не ноль. Я подтвердил, что предложение if оценивает значение true и что deselectRowForIndexPath: анимируется. –
Интересно, слишком ли viewWillAppear слишком рано в контуре просмотра. Можете ли вы попробовать viewDidAppear и посмотреть, работает ли это? –