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

Posted

技术标签:

【中文标题】自定义 UITableViewCell 标签文本在取消选择时不会变回【英文标题】:Custom UITableViewCell label text doesn't change back on deselect 【发布时间】:2013-10-25 20:41:37 【问题描述】:

我有一个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 中的错误还是我做错了什么?

【问题讨论】:

【参考方案1】:

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

-(void)viewWillDisappear:(BOOL)animated

  [super viewWillDisappear:YES];

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


【讨论】:

【参考方案2】:

杰米,我也遇到了同样的情况。我有一个UIView 作为contentViewUITableViewCellUITableViewUIPopoverController 中。如果我在关闭弹出框后重新打开它,选择突出显示将不会清除。

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

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

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

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

【讨论】:

以上是关于自定义 UITableViewCell 标签文本在取消选择时不会变回的主要内容,如果未能解决你的问题,请参考以下文章

Swift中基于标签文本长度的动态自定义UITableViewCell的高度

根据标签文本长度动态自定义 UITableViewCell 的高度

自定义 UITableViewCell 标签消失

自定义 uitableViewcell 内部:UILabel 背景超出文本长度(以编程方式)

调整 UILabel 的大小以适应自定义 UITableViewCell 中的文本,无论宽度如何

重用自定义UITableViewCell,如何获取每个单元格文本字段的文本进行保存?