iOS 使用情节提要的自定义字体
通过在序列图像板和类别中使用用户定义的运行时属性,可以轻松实现序列图像板中UI组件的自定义字体。
优点是,
不需要为ui元素定义outlet
无需通过编程为元素设置字体。
遵循的步骤
字体文件:将字体文件(.ttf)添加到应用程序包中,并为字体添加条目输入信息.plistunder应用程序提供的字体,如本自定义字体文档中所示。
定义类别:添加一个像UIKit+IBExtensions这样的文件,并为UILabel、UIButton等要设置自定义字体的UI元素添加类别。所有类别都将有一个自定义属性,比如fontName。这将在稍后的脚本中用于设置自定义字体(如步骤4所示)。
UIKit+IBExtensions.h
#import <UIKit/UIKit.h>
//UILabel 类别扩展
@interface UILabel (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
// UITextField 的类别扩展
@interface UITextField (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
// UIButton的类别扩展
@interface UIButton (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
Getters和Setters:为每个添加的类别定义fontName属性的Getters和Setters。
UIKit+IBExtensions.m
#import "UIKit+IBExtensions.h"
@implementation UILabel (IBExtensions)
- (NSString *)fontName {
return self.font.fontName;
}
- (void)setFontName:(NSString *)fontName {
self.font= [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end
@implementation UITextField (IBExtensions)
- (NSString *)fontName {
return self.font.fontName;
}
- (void)setFontName:(NSString *)fontName {
self.font= [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end
@implementation UIButton (IBExtensions)
- (NSString *)fontName {
return self.titleLabel.font.fontName;
}
- (void)setFontName:(NSString *)fontName{
self.titleLabel.font = [UIFont fontWithName:fontName size:self.titleLabel.font.pointSize];
}
@end
在序列图像板中设置字体:在用户定义的运行时属性中添加一个条目,fontName作为keyPath,自定义字体的名称作为value,type作为String,如图所示。
这将在运行应用程序时设置自定义字体。
Notes:
Lato-Regular是我使用的自定义字体。
捆绑包中添加的.ttf文件中的相同名称应在序列图像板中使用,而不带扩展名。
字体大小将与UI元素的属性检查器中定义的相同。