更改所有UIButton字体

时间:2014-03-04 11:41:25

标签: ios uibutton

我一直在寻找接近2个小时,并且找不到这个问题的可靠答案。

我尝试使用外观机制,但似乎你无法用它来改变字体。

我看过这里建议的答案: How to change all UIButton fonts to custom font

有3个答案:

  1. 使用buttonOutlet,但这需要一个数组,整个项目中的所有按钮最多都链接到。
  2. 使用类别,但从我读到的内容非常不鼓励使用类别 为了覆盖现有的方法。
  3. 使用从UIButton派生的自定义类,但是当我尝试使用提供的类时 并且在界面生成器中设置它没有任何反应,这使我相信你需要按照程序添加你的按钮。
  4.   

    编辑:如果你实现 - (id)initWithCoder:(NSCoder *)uibutton的aDecoder方法,则回答3   这使您只需在界面构建器中更改类,但仍需要对项目中的所有按钮执行此操作。

    有没有人有任何新想法?

4 个答案:

答案 0 :(得分:6)

在Swift3中

UIButton.appearance().titleLabel?.font = font

答案 1 :(得分:2)

由于某种原因,只有来自Apple的神知道,

[[[UIButton appearance] titleLabel] setFont:fontButton];

不起作用。

中提到了一个对我有用的解决方案

How to set UIButton font via appearance proxy in iOS 8?

Objective-C中的解决方案是创建一个公开titleLabel字体的类别

<强>的UIButton + TitleLabelFont.h

#import <UIKit/UIKit.h>

@interface UIButton (TitleLabelFont)

@property (strong, nonatomic) UIFont *titleFont;

@end

<强>的UIButton + TitleLabelFont.m

#import "UIButton+TitleLabelFont.h"

@implementation UIButton (TitleLabelFont)

- (UIFont *)titleFont {

    return self.titleLabel.font;
}

- (void)setTitleFont:(UIFont *)titleFont {

    self.titleLabel.font = titleFont;
}

@end

然后在您使用

设置外观的源中导入类别UIButton + TitleLabelFont
#import "UIButton+ASLAdditions.h"

您将能够使用

设置外观
[UIButton appearance].titleFont = fontButton;

经过测试和完美的工作

答案 2 :(得分:1)

您可以使用UIAppearance自定义任何控件的视图。您可以在NSHipster上这篇非常有用的文章中查看更多信息。

答案 3 :(得分:-1)

for (UIButton *button in self.view.subviews) {
        if ([button isKindOfClass:UIButton.class]) {
            button.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:14.0f];
        }
    }

如果您无法使链接的问题起作用,则可以正常工作。