如何设置子类UIButton的高亮标题颜色?

问题描述:

我已经子类UIButton,并试图设置标题的颜色,当按钮被突出显示。自定义按钮也位于笔尖文件中。如何设置子类UIButton的高亮标题颜色?

我的代码:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    self.titleLabel.textColor = [UIColor blueColor]; 
    [self setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; // Offending line 

} 

然而,视图不加载(貌似进入无限循环而没有示出)时,我有setTitleColor:forState:线。它应该在其他地方宣布吗?你还怎么设置自定义UIButton的高亮标题颜色?

+0

线“,你究竟是什么意思?它报告编译时间消息吗?或者当你尝试执行它时出错?如果后者,你认为你有一个UIButton(或它的子类),但也许该对象实际上是别的东西? – 2012-08-06 02:37:16

+0

违规行是什么使视图崩溃。它进入看起来像一个无限循环,并不加载。我会用这个更新我的问题。 – zlog 2012-08-06 11:46:20

如果你想这样做在layoutSubviews,这将避免无限循环您正在创建:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    if (self.state == UIControlStateHighlighted) { 
     self.titleLabel.textColor = [UIColor redColor]; 
    } else { 
     self.titleLabel.textColor = [UIColor blueColor]; 
    } 
} 
+0

完美的作品。谢谢! – zlog 2012-08-07 01:03:49

+0

这种方法的问题在于,在视图控制器的生命周期中多次调用这个方法,所以效率并不高。 – 2015-06-03 18:54:24

你在做别的用的UIButton子类?如果你想要做的是改变文字颜色,您可以使用标准的UIButton功能:

[button setTitleColor:[UIColor redColor] forControlState:UIControlStateHighlighted]; 
[button setTitleColor:[UIColor whiteColor] forControlState:UIControlStateNormal]; 

设置按钮时执行此操作,它并不需要发生每次layoutSubviews由“// Offnding称为

+0

自定义按钮类的原因是因为它有点破解。我需要一个自定义字体f或我的按钮,当我在我的笔尖选中它时,xcode保持崩溃状态,所以我以编程方式更改了字体。这是另一个问题 – zlog 2012-08-06 12:38:12