更改控件使用的默认systemFont

时间:2012-12-10 09:47:59

标签: objective-c uifont system-font

我有一个很大的应用程序,需要更改字体,但我不想触摸每个标签,文本字段等。如何访问IB和[UIFont systemFontOfSize:x]中使用的“systemFont”?

我已经尝试过这个:iOS 5: Curious about UIAppearance但这不是解决方案,因为我的应用程序中有不同的FontSizes和Bold / Regular,我无法将其整体设置。

我可以通过UIApplication或InfoPlist中的某个地方设置它吗?

2 个答案:

答案 0 :(得分:5)

您可以为UILabel,UITextField和UIButton创建类别,并且可以在“awakeFromNib”方法中将字体名称更改为新字体,并且可以保持相同的大小。我在下面为UILabel类添加了代码。您可以对UITextField和UIButton执行相同的操作。

@implementation UILabel (CustomFontLabel)

-(void)awakeFromNib{
    [super awakeFromNib];
    float size = [self.font pointSize];
    NSString *stringfontstyle=self.font.fontName;
    if([stringfontstyle rangeOfString:@"Bold"].location != NSNotFound) {
        self.font = [UIFont fontWithName:@"MyCustomFont-Bold" size:size];
    }
    else if ([stringfontstyle rangeOfString:@"Italic"].location != NSNotFound) {
        self.font = [UIFont fontWithName:@"MyCustomFont-Italic" size:size];
    }
    else if ([stringfontstyle rangeOfString:@"Medium"].location != NSNotFound) {
        self.font = [UIFont fontWithName:@"MyCustomFont-Medium" size:size];
    }
    else {
        self.font = [UIFont fontWithName:@"MyCustomFont" size:size];
    }
}

@end

答案 1 :(得分:2)

实际上,Paramasivan的回答只是部分正确。问题是如果例如UILabel要实现awakeFromNib,它将永远不会被调用。您的类别将覆盖此方法。您可以调整或覆盖它,如下所示:

http://www.mikeash.com/pyblog/friday-qa-2010-01-29-method-replacement-for-fun-and-profit.html