带故事板的自定义字体
通过故事板和类别中的 用户定义的运行时属性 ,可以轻松实现故事板中 UI 组件的自定义字体。
优点是,像,
- 无需为 ui 元素定义出口
- 无需以编程方式为元素设置字体。
要遵循的步骤
字体文件: 添加字体文件(.TTF)的应用程序包,并添加在 Info.plist 中的字体下的条目由应用程序提供的字体,因为这在文档的自定义字体。
定义类别: 添加 UIKit + IBExtensions 等文件,并添加要为其设置自定义字体的 UI 元素(如 UILabel,UIButton 等)的类别。所有类别都将具有自定义属性 say fontName 。稍后将使用故事板来设置自定义字体(如步骤 4 中所示)。
UIKit 的+ IBExtensions.h
#import <UIKit/UIKit.h>
//Category extension for UILabel
@interface UILabel (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
// Category extension for UITextField
@interface UITextField (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
// Category extension for UIButton
@interface UIButton (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
- Getters 和 Setter: 为每个添加的类别定义 fontName 属性的 getter 和 setter。
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,自定义字体的名称为值,类型为 String,如图所示。
这将在运行应用程序时设置自定义字体。
笔记:
- Lato-Regular 是我使用的自定义字体。
- 在 bundle 中添加的 .ttf 文件中的相同名称应该在 storyboard 中没有扩展名的情况下使用。
- 字体大小与 UI 元素的属性检查器中定义的相同。