2013-11-20 2 views
0

У меня есть пользовательский подкласс 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 
+0

Является ли indexPathForSelectedRow возвращением не-nil в viewWillAppear? –

+0

Да, это не ноль. Я подтвердил, что предложение if оценивает значение true и что deselectRowForIndexPath: анимируется. –

+0

Интересно, слишком ли viewWillAppear слишком рано в контуре просмотра. Можете ли вы попробовать viewDidAppear и посмотреть, работает ли это? –

ответ

0

Похоже это была вызвана следующим кодом в tableView:didSelectRowAtIndexPath:

UITableViewCell *selectedCell = [self tableView:self.tableView cellForRowAtIndexPath:indexPath]; 

меняющегося его на это исправили проблему:

UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath]; 

Не конечно, что я пил с этой первой попыткой.

Смежные вопросы