我正在尝试将整个应用中的标签字体(或至少由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。
答案 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];