如何正确使用UIAppearance为View Controller中的所有标签设置字体

时间:2016-02-18 09:28:18

标签: ios objective-c uilabel uiappearance

我正在尝试将整个应用中的标签字体(或至少由View Controller控制的标签)设置为相同,因此,我选择了创建类别的选项,例如推荐here或{{ 3}}。出于这些目的,我创建了方法" setSubstituteFont"在UILabel类别中。但是,语法

[[UILabel appearance] setSubstituteFont];
如果我将该语句放在我的View Controller中,

总是给出同样的错误:

  

由于未捕获的异常而终止应用   ' NSInvalidArgumentException',原因:' - [NSMethodSignature   getArgumentTypeAtIndex:]:index(2)超出范围[0,1]'

我更喜欢在我的视图控制器中实现该功能,因为我的视图是.xib,因此,使用" setNeedsDisplay"因为here不是一个选项。

我还尝试过其他选项:

[[UILabel appearanceWhenContainedIn:[UIViewController class], nil] setSubstituteFont];

[[UILabel appearanceWhenContainedIn:[self class], nil] setSubstituteFont];

[[UILabel appearanceForTraitCollection:self.traitCollection] setSubstituteFont];

自" appearanceWhenContainedIn"在iOS9中根据here弃用,但仍然会出现相同的错误,应用程序崩溃了。

之间," setSubstituteFont"方法看起来像这样:

- (void)setSubstituteFont UI_APPEARANCE_SELECTOR {
    self.font = [UIFont fontWithName:@"GothamRounded-Book" size:54.0];
}

使用的选择器取自the documentation

1 个答案:

答案 0 :(得分:1)

试试这个

@interface UILabel (UIAPP)
- (void)setSubstituteFont:(UIFont *)font UI_APPEARANCE_SELECTOR;
@end


@implementation UILabel (UIAPP)
- (void)setSubstituteFont:(UIFont *)font {
    if (font == nil) {
        self.font = [UIFont fontWithName:@"GothamRounded-Book" size:54.0];
    } else {
        self.font = font;
    }
}
@end

甚至在View Controller中调用所需的位置:

[[UILabel appearance] setSubstituteFont: nil];