在为 iOS 7 更新我的 iOS 应用程序时,我遇到了同样的问题。我想为整个应用程序设置自定义字体,即使对于不允许自定义字体的控件(例如选择器)。
在网络和 Twitter 上进行了一些研究之后,我使用 Method Swizzling 解决了这个问题,这是一种包含交换方法实现的实践。
注意:如果不小心使用,此方法可能会很危险!阅读关于 SO 的讨论:方法混杂的危险
但是,这是要做的:
- 创建一个 UIFont 类别,例如 UIFont+CustomSystemFont。
- 导入
<objc/runtime.h>
您的 .m 文件。
- 保持 .h 文件不变,并将此代码添加到 .m:
+(UIFont *)regularFontWithSize:(CGFloat)size
{
return [UIFont fontWithName:@"Your Font Name Here" size:size];
}
+(UIFont *)boldFontWithSize:(CGFloat)size
{
return [UIFont fontWithName:@"Your Bold Font Name Here" size:size];
}
// 方法混搭
+(void)load
{
SEL original = @selector(systemFontOfSize:);
SEL modified = @selector(regularFontWithSize:);
SEL originalBold = @selector(boldSystemFontOfSize:);
SEL modifiedBold = @selector(boldFontWithSize:);
Method originalMethod = class_getClassMethod(self, original);
Method modifiedMethod = class_getClassMethod(self, modified);
method_exchangeImplementations(originalMethod, modifiedMethod);
Method originalBoldMethod = class_getClassMethod(self, originalBold);
Method modifiedBoldMethod = class_getClassMethod(self, modifiedBold);
method_exchangeImplementations(originalBoldMethod, modifiedBoldMethod);
}