UIButton 子类 initWithCoder 中的 setTitleColor:forState 未设置颜色
Posted
技术标签:
【中文标题】UIButton 子类 initWithCoder 中的 setTitleColor:forState 未设置颜色【英文标题】:setTitleColor:forState in UIButton subclass initWithCoder not setting color 【发布时间】:2013-12-26 12:54:26 【问题描述】:我已将包含在自定义 .xib 文件中的 UIButton 子类化,并且我正在尝试通过 initWithCoder
方法为每个状态设置按钮的标题颜色。目前,我有这个:
-(id)initWithCoder:(NSCoder *)aDecoder
self = [super initWithCoder:aDecoder];
if(self)
self.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
[self setTitleColor:[UIColor navigationLabelColor] forState:UIControlStateNormal];
return self;
但是,标题颜色没有改变,但边缘插图改变了。我做错了吗?
PS:我应该补充一点,自定义 xib 用于不同的元素,但该 xib 中有多个此按钮的实例。
【问题讨论】:
你尝试过其他颜色吗? 感谢您的回复 - 是的,我做到了。[UIColor greenColor]
没有任何区别。
许多开发人员会同意不要将 UIButton 子类化,因为它非常复杂,因此您可以尝试其他选项
@Retro UIButton
的成功子类化取决于您的需求,它并不总是不合适的。
@Zaph 是的,我同意 :) 谢谢 +1
【参考方案1】:
子类化 UIButton 并不简单,因为 UIButtonType
似乎默认为 UIButtonTypeCustom
用于简单的子类化。更改框架/边界似乎可以正常工作,但其他一些方面则不行。
就我个人而言,我已经成功地为我的需要进行了子类化,使用了UIButtonTypeCustom
并主要添加了背景图像拉伸。
您需要找到另一种方法来满足您的需求或深入研究 UIButton 的子类化。
由于对 UIButton 的子类化进行搜索,您会发现大量信息,包括 cmets 说基本上不这样做。看到这个SO answer。
【讨论】:
嗨 Zaph,感谢您的回复,很抱歉花了这么长时间才回复您。我遇到的问题是标题是一个属性字符串,因此要更改属性字符串的属性,您必须调用:setAttributedTitle:forState:
。不过还是谢谢。以上是关于UIButton 子类 initWithCoder 中的 setTitleColor:forState 未设置颜色的主要内容,如果未能解决你的问题,请参考以下文章
来自笔尖的 NSWindowController 子类初始化不使用 -initWithCoder:?
如何在 UIView 的子类中同时覆盖 initWithFrame: 和 initWithCoder:?