自定义UITableViewCell标签文本在取消选择时不会更改

时间:2013-10-25 20:41:37

标签: uitableview ios7 uiappearance

我有UITableViewCell的自定义子类。我通过设置UILabel的外观代理的一些属性来自定义单元格中包含的标签,如下所示:

[UILabel appearanceWhenContainedIn:[UITableViewCell class], nil].textColor = [UIColor blackColor];
[UILabel appearanceWhenContainedIn:[UITableViewCell class], nil].highlightedTextColor = [UIColor redColor];

当我在UI中选择单元格时,标签的颜色会按预期更改,并且代码会对下一个视图控制器执行推送。但是,当我弹出这个新的视图控制器并使用自定义UITableViewCell返回到屏幕时,即使我在代码中取消选择单元格,突出显示的文本颜色仍然如下:

- (void)viewDidAppear:(BOOL)animated
{
    if ([self.tableView indexPathForSelectedRow]) {
        [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
    }
    [super viewDidAppear:animated];
}

这是iOS 7中的错误还是我做错了什么?

2 个答案:

答案 0 :(得分:0)

我不会把它称为错误,但有办法解决它。

-(void)viewWillDisappear:(BOOL)animated{

  [super viewWillDisappear:YES];

  if ([self.tableView indexPathForSelectedRow]) {
    [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow]    animated:YES];
  }

}

答案 1 :(得分:0)

杰米,我遇到了同样的情况。我的UIViewcontentView UITableViewCell,而UITableView位于UIPopoverController。如果我在解雇后重新打开弹出窗口,则选择突出显示不会清除。

我确实尝试了这里提到的两种解决方案,正如你所说,两者都不起作用。在调试时我意识到UITableView以某种方式丢失了选择并且没有为indexPathForSelectedRow返回任何内容。

不幸的是我找不到一个很好的解决方案。我称之为iOS 7错误 UITableView的行为不像以前那样和预期的一样。

我使用的解决方案是更改UIView的背景颜色,而不是使用UITableView的选择方法,并将其更改为viewWillDisappear中的默认颜色。

我很想看到更好的解决方案。