如果字体也更改,则按钮标签颜色更改不起作用

Button label color change doesn't work if font is also changed

这是一个简单的自定义按钮示例,它在 IB 中设置为按钮的 class:

#import "TestButton.h"
@implementation TestButton

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    UIFont * font = [UIFont systemFontOfSize:8];
    if ( self.setFont )
        self.titleLabel.font = font;
    self.titleLabel.textColor = [UIColor redColor];
}

@end

如果setFont为false,即字体不变,标签文字颜色为红色。但如果为真,则按钮文本颜色是在 IB 中设置的任何颜色。

所以问题是这里发生了什么,以及如何以编程方式更改在 IB 中分配的按钮的文本和字体。

如果有人想了解这些特性以及 IBDesignable 有多时髦,请参阅 demo project

替换

self.titleLabel.textColor = [UIColor redColor];

[self setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

以下代码用于设置文本:

[self setTitle:@"New Text" forState:UIControlStateNormal];

如果您想在按钮文件本身之外的任何地方设置标题或标题颜色,您可以尝试向按钮添加两个 public 属性。一个 NSString 属性 用于标题 (self.titleString) 和一个 UIColor 属性 用于标题颜色。然后,您可以在视图控制器或视图中的任何地方设置标题和/或标题颜色。然后,您将在按钮文件中使用这些属性,例如

[self setTitle:self.titleString forState:UIControlStateNormal];