0

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

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

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

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

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

4

2 回答 2

0

我不会称它为错误,但有一种方法可以修复它。

-(void)viewWillDisappear:(BOOL)animated{

  [super viewWillDisappear:YES];

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

}
于 2013-10-25T21:09:05.507 回答
0

杰米,我面临着完全相同的情况。我有一个UIViewas contentViewofUITableViewCell并且UITableView是在一个UIPopoverController. 如果我在关闭弹出框后重新打开它,选择突出显示将不会清除。

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

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

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

我全神贯注于阅读更好的解决方案。

于 2013-10-26T15:58:12.810 回答