Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom font in a storyboard?

I have a font added to my iOS project. It's in the project and copied when the project builds. It appears to be a valid font and will show up if I list all fonts on the device through the app. I have the plist set up properly to include the font. I can't seem to get the find to show up to use it in my text controls, buttons, etc in Xcode 4.2's storyboard section. Further it doesn't appear to allow me to type the font name, it forces me to use the font dialog. I attempted to install this font in the system as well, but cannot seem to get it to show in this list. Do I need to do this in code only or can I do this through the storyboard interface?

Note that I can get this working in code, but it would be much more convenient to do this via the storyboard.

like image 549
slycrel Avatar asked Feb 01 '12 04:02

slycrel


People also ask

How do you change the font size on a storyboard?

Change Font And Size Of UILabel In Storyboard To change the font or the size of a UILabel in a Storyboard or . XIB file, open it in the interface builder. Select the label and then open up the Attribute Inspector (CMD + Option + 5). Select the button on the font box and then you can change your text size or font.

How do I add custom fonts to Xcode?

To add a font file to your Xcode project, select File > Add Files to “Your Project Name” from the menu bar, or drag the file from Finder and drop it into your Xcode project. You can add True Type Font (. ttf) and Open Type Font (. otf) files.


1 Answers

UPDATE: Xcode 6 Interface Builder now allows you to select custom fonts and will render them at design time correctly.

I know this question is quite old, but I've been struggling to find an easy way to specify a custom font in Storyboard (or Interface Builder) easily for iOS 5 and I found a quite convenient solution.

First, make sure that you've added the font to the project by following this tutorial. Also remember that UINavigationBar, UITabBar and UISegmentedControl custom font can be specified by using the setTitleTextAttributes: method of the UIAppearance proxy.

Add the categories below to the project for UIButton, UITextField, UILabel and any other component that needs a custom font. The categories simply implement a new property fontName which changes the current font of the element while maintaining the font size.

To specify the font in Storyboard, just select the desired element (label, button, textview, etc) and add a User Defined Runtime Attribute with Key Path set to fontName of type String and value with the name of your custom font.

Custom font Storyboard

And that's it, you don't even need to import the categories. This way you don't need an outlet for every UI component that requires a custom font and you don't need to code it manually.

Take into account that the font won't show in Storyboard, but you will see it when running on your device or simulator.


Category files

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 

Also downloadable from GIST and also as a single file.

Troubleshooting

If you run against runtime errors because the fontName property is not specified just add the flag -all_load under Other linker Flags in project settings to force the linker to include the categories.

like image 135
redent84 Avatar answered Sep 28 '22 02:09

redent84