字体和 textColor 消失了 - 又一个 UITableViewCell awakeFromNib
Posted
技术标签:
【中文标题】字体和 textColor 消失了 - 又一个 UITableViewCell awakeFromNib【英文标题】:Font and textColor are gone - Yet another UITableViewCell awakeFromNib 【发布时间】:2012-12-19 16:49:51 【问题描述】:我不知道这是否特定于 UITableViewCells
而是一般用于 UIViews
(我相信),但我注意到一个单元格的 问题。
如前所述,我有一个自定义的UITableViewCell
子类,它在使用指定的 init 初始化时从 xib 加载自身:
- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:nil options:nil];
self = nib[0];
if (self)
// Initialization code
_reuseIdentifier = reuseIdentifier;
return self;
它有一个UILabel
作为出口,我在awakeFromNib
方法中设置了它的一些属性:
- (void)awakeFromNib
[super awakeFromNib];
self.labelLeft.textColor = [UIColor grayColor];
self.labelLeft.font = [UIFont boldSystemFontOfSize:15.0f];
关键是,标签不保留 textColor 和字体,我不明白为什么。awakeFromNib
被调用并且插座连接正确,因为我可以设置文本。
在我在UITableViewDataSource
中设置他的文本后,我可以通过设置这些属性使其工作,但我觉得这不是正确的方法,我想了解为什么这不起作用。
问题: 为什么它不保留 Font 和 Textcolor,我该怎么做才能让它以正确的方式工作?
【问题讨论】:
“从 xib 加载自身” - 这就是问题所在。我敢打赌,如果您以编程方式创建单元格,它会起作用。 是的,如果我全部通过代码完成,它肯定会奏效。但我想知道为什么这不起作用。 嗯,它有点工作。它只是不保留颜色和字体... 我也有同样的问题。是的,我可以在单元格的每个更新方法中设置新的字体和颜色,但我不会只设置一次。 我找到了问题所在。尝试在答案中解释更多细节。 【参考方案1】:我从.Nib
加载的所有标签都有同样的问题。然后我发现问题出在UIAppearance
。我的AppDelegate
中有以下行:
+ (void)styleApplication
[[UILabel appearance] setFont:[MGStylesheet defaultLightFontOfSize:17]];
此方法更新我的应用程序中的所有字体,一切正常,直到我开始从.Nib
加载我的UIView
。当我删除它时,一切都开始按预期工作。
【讨论】:
是的,当然是 UIAppearance!只需在调用 super 后将代码放入-layoutSubviews
即可。完全有道理!【参考方案2】:
在 nib 文件中设置标签的属性。如果您将接口配置拆分到不同的地方,这只会导致崩溃。
如果您不想这样做,请将标签的配置移动到 viewDidLoad:
【讨论】:
我的问题是为什么它不起作用,不是我还能做什么。以上是关于字体和 textColor 消失了 - 又一个 UITableViewCell awakeFromNib的主要内容,如果未能解决你的问题,请参考以下文章
使用Selector改变TextView的字体颜色textColor的方法
tabBarItem是模型,只有控件才有textColor属性