不推荐使用setFont for UIButton,我尝试了新方法,但保持失败

时间:2013-09-20 17:37:49

标签: ios objective-c uibutton

我想使用以下代码使用我自己的字体自定义所有按钮:

// Custom fonts for button with tag
for (UIButton *customButton in [[self view] subviews]) {
    if (customButton.tag == 1) {
        customButton.titleLabel.font = [UIFont fontWithName:@"OpenSans-Regular" size:14];
    }
}

但我在调试器控制台上收到此错误消息:

2013-09-21 00:33:33.160 Test[794:907] -[UILabel titleLabel]: unrecognized selector sent to instance 0x1dda8d80
2013-09-21 00:33:33.165 Test[794:907] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILabel titleLabel]: unrecognized selector sent to instance 0x1dda8d80'

我做错了什么?我正在使用XCode 4.6.3并以iOS6为目标。谢谢......

4 个答案:

答案 0 :(得分:2)

您发送消息titleLabel的对象不是UIButton,它已经UILabel且标签= 1,您需要确保访问UIButton对象:

for (UIButton *customButton in [[self view] subviews]) {
    if ((customButton.tag == 1) && ([customButton isKindOfClass:[UIButton class]])) {
        customButton.titleLabel.font = [UIFont fontWithName:@"OpenSans-Regular" size:14];
    }
}

答案 1 :(得分:1)

这意味着,customButton不是一个按钮,它是一个UILabel。 UILabel没有标题标签,这就是你得到这个错误的原因。检查.tag == 1是否为UIButton。如果是,你可以改变字体,就像你一样。

答案 2 :(得分:1)

这个问题已经被问到了,所以我只想引用其他帖子的答案。

” 如果你使用IBOutletCollection,那么这应该是直接的。

@property (nonatomic, retain) IBOutletCollection(UIButton) NSArray *buttons;

将按钮连接到此插座集合,然后使用

一次性更改字体
[self setValue:[UIFont fontWithName:@"Helvetica" size:30] forKeyPath:@"buttons.font"];

这将改变连接到IBOutletCollection的所有按钮字体

答案 3 :(得分:0)

试试这个

[button.titleLabel setFont:[UIFont boldSystemFontOfSize:13]];