【问题标题】:Button label color change doesn't work if font is also changed如果字体也更改,按钮标签颜色更改不起作用
【发布时间】:2015-03-24 21:43:02
【问题描述】:

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

#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

【问题讨论】:

    标签: ios cocoa-touch ibdesignable


    【解决方案1】:

    替换

    self.titleLabel.textColor = [UIColor redColor];
    

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

    【讨论】:

    • 谢谢 - 这行得通。有趣的是,当在 xCode 6.2 的 setFont 上使用 IB_DESIGNABLE 和 IBInspectable 时,它​​的作用正好相反。也就是说,当我将字体设置为关闭时,它会按预期更新标题颜色,但是当打开时,文本保持默认颜色,而不是红色。无论如何,你知道为什么设置titleLabel的颜色不起作用吗?
    • 我个人不确定为什么 Apple 不允许第一种方法工作,但我知道第二种方法更好,因为它允许您设置多个状态的颜色,除了UIControlStateNormal。 (例如,您可以使用UIControlStateHighlighted 来定义单击按钮时使文本变为什么颜色)
    【解决方案2】:

    以下代码用于设置文本:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 2019-11-24
      相关资源
      最近更新 更多