2

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

我已经尝试过这个:iOS 5:对 UIAppearance 感到好奇,但这不是解决方案,因为我的应用程序有不同的 FontSizes 和 Bold/Regular,我无法对其进行整体设置。

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

4

2 回答 2

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
于 2012-12-10T09:52:12.320 回答
2

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

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

于 2013-06-28T00:42:56.707 回答