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:?

NSManaged 对象 initWithCoder 错误

你在哪里设置子视图的图层属性?为啥不在 initWithCoder 中

子类 UIButton 似乎没有初始化

UIButton 子类不响应超级方法?