帶故事板的自定義字型
通過故事板和類別中的 使用者定義的執行時屬性 ,可以輕鬆實現故事板中 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 元素的屬性檢查器中定義的相同。