ОБНОВЛЕНИЕ: Xcode 6 Interface Builder теперь позволяет выбирать пользовательские шрифты и правильно отображать их во время разработки.
Я знаю, что этот вопрос довольно старый, но я изо всех сил пытался найти простой способ легко указать собственный шрифт в Storyboard (или Interface Builder) для iOS 5, и я нашел довольно удобное решение.
Сначала убедитесь, что вы добавили шрифт в проект, следуя этому руководству . Также помните, что пользовательский шрифт UINavigationBar, UITabBar и UISegmentedControl можно указать с помощью метода setTitleTextAttributes:
прокси UIAppearance .
Добавьте следующие категории в проект для UIButton, UITextField, UILabel и любого другого компонента, которому требуется собственный шрифт. Категории просто реализуют новое свойство fontName
, которое изменяет текущий шрифт элемента при сохранении размера шрифта.
Чтобы указать шрифт в раскадровке, просто выберите нужный элемент (метка, кнопка, текстовое представление и т. Д.) И добавьте Определенный пользователем атрибут времени выполнения с Путь к ключу , установленный в fontName типа String и значения с именем вашего пользовательского шрифта.

И это все, вам даже не нужно импортировать категории. Таким образом, вам не нужна розетка для каждого компонента пользовательского интерфейса, для которого требуется собственный шрифт, и вам не нужно кодировать его вручную.
Примите во внимание, что шрифт не будет отображаться в раскадровке, но вы увидите его при запуске на устройстве или симуляторе.
Файлы категорий
UIButton + TCCustomFont.h
#import <UIKit/UIKit.h>
@interface UIButton (TCCustomFont)
@property (nonatomic, copy) NSString* fontName;
@end
UIButton + TCCustomFont.m
#import "UIButton+TCCustomFont.h"
@implementation UIButton (TCCustomFont)
- (NSString *)fontName {
return self.titleLabel.font.fontName;
}
- (void)setFontName:(NSString *)fontName {
self.titleLabel.font = [UIFont fontWithName:fontName size:self.titleLabel.font.pointSize];
}
@end
UILabel + TCCustomFont.h
#import <UIKit/UIKit.h>
@interface UILabel (TCCustomFont)
@property (nonatomic, copy) NSString* fontName;
@end
UILabel + TCCustomFont.m
#import "UILabel+TCCustomFont.h"
@implementation UILabel (TCCustomFont)
- (NSString *)fontName {
return self.font.fontName;
}
- (void)setFontName:(NSString *)fontName {
self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end
UITextField + TCCustomFont.h
#import <UIKit/UIKit.h>
@interface UITextField (TCCustomFont)
@property (nonatomic, copy) NSString* fontName;
@end
UITextField + TCCustomFont.m
#import "UITextField+TCCustomFont.h"
@implementation UITextField (TCCustomFont)
- (NSString *)fontName {
return self.font.fontName;
}
- (void)setFontName:(NSString *)fontName {
self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end
Также можно загрузить из GIST , а также как отдельный файл .
Устранение неполадок
Если вы работаете с ошибками времени выполнения, поскольку свойство fontName
не указано, просто добавьте флаг -all_load
в поле Другие флаги компоновщика в настройках проекта, чтобы компоновщик включил категории.