使用 UIAppearance 更改所有 UITableViewCells 的文本颜色

Posted

技术标签:

【中文标题】使用 UIAppearance 更改所有 UITableViewCells 的文本颜色【英文标题】:Change the text colors of all UITableViewCells using UIAppearance 【发布时间】:2015-12-13 20:43:19 【问题描述】:

我无法使用UIAppearance 机制更改UITableViewCell 的文本颜色。

这是我的带有 cmets 的代码,显示了哪些对我有用,哪些对我无效:

UITableViewCell *cell = [UITableViewCell appearance];
cell.backgroundColor = [UIColor blueColor]; // working
cell.textLabel.textColor = [UIColor whiteColor]; // NOT WORKING
cell.detailTextLabel.textColor = [UIColor redColor]; // NOT WORKING

UILabel *cellLabel = [UILabel appearanceWhenContainedIn:[UITableViewCell class], nil];
cellLabel.textColor = [UIColor whiteColor]; // working

如您所见,第二种方法有效,但我无法为普通文本和详细文本设置不同的颜色。

是不是我做错了什么?

附:在 Interface Builder 中静态定义内容对我不起作用 - 我有可以在运行时动态更改的主题。

【问题讨论】:

【参考方案1】:

您做对了,但 ios 无法使用 UIAppearance 区分这两个标签。您应该在willDisplayCell 中设置文本颜色,或者,如果您真的想使用UIAppearance,请创建可以更准确定位的自定义UILabel 子类。

如果你想使用willDisplayCell,它看起来像这样:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
    cell.textLabel.textColor = [UIColor blackColor];
    cell.detailTextLabel.textColor = [UIColor redColor];

或者,you might also find this answer has some other ideas.

【讨论】:

我需要澄清一下——我只为详细的文本创建了一个 UILabel 子类,比如 MyLabel。然后我尝试为 UILabel 外观和 MyLabel 外观着色,使两者具有相同的类层次结构。问题是 UILabel 颜色总是“获胜”,而 MyLabel 颜色永远不会被应用。关于如何评估条件的任何想法?【参考方案2】:

你可以像这样设置文本颜色。

[cell.textLabel setTextColor:[UIColor whiteColor]];
[cell.detailTextLabel setTextColor:[UIColor redColor]];

【讨论】:

正如我在帖子中提到的 - 它不起作用。我猜[cell.textLabel setTextColor:[UIColor whiteColor]];cell.textLabel.textColor = [UIColor whiteColor]; // NOT WORKING之间没有区别 你可以尝试从视图中获取标签 UILabel *label=(UILabel *)[cell.contentView viewWithTag:yourLabelTag];然后设置文本颜色。 是外观代理,没有任何contentView。

以上是关于使用 UIAppearance 更改所有 UITableViewCells 的文本颜色的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIAppearance 在更改后更新导航栏

仅更改默认 UILabel 的 UIAppearance

防止 iOS 7 UINavigationBar 使用 UIAppearance 为 barTintColor 更改设置动画

UIButton 的 uiappearance 也会更改 UIBarButton 图像吗?

设置 UIAppearance 不会影响 cocoapod UI 组件

iOS - 防止 UIAppearance 设置更改 UIWebView 输入附件视图