使用 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 的文本颜色的主要内容,如果未能解决你的问题,请参考以下文章
防止 iOS 7 UINavigationBar 使用 UIAppearance 为 barTintColor 更改设置动画
UIButton 的 uiappearance 也会更改 UIBarButton 图像吗?