This is a very cool question that prompted me to make a subclass UIButtonthat allows you to set standard fonts!
I also wrote some sample code that shows how to install a font. If you are using Interface Builder, set the button class ConfigurableButton. In the code, the button should also be declared as ConfigurableButton, since I added new properties and a method setFont:forState:.
Please leave a comment for any improvements that can be made!
View controller implementation
#import "ViewController.h"
#import "ConfigurableButton.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet ConfigurableButton *toggleButton;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_toggleButton.normalFont = [UIFont fontWithName:@"BradleyHandITCTT-Bold" size:14];
_toggleButton.highlightedFont = [UIFont fontWithName:@"Chalkduster" size:14];
_toggleButton.selectedFont = [UIFont fontWithName:@"Zapfino" size:14];
_toggleButton.disabledFont = [UIFont fontWithName:@"Arial" size:14];
}
@end
ConfigurableButton.h
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface ConfigurableButton : UIButton
@property (strong, nonatomic) UIFont *normalFont;
@property (strong, nonatomic) UIFont *highlightedFont;
@property (strong, nonatomic) UIFont *selectedFont;
@property (strong, nonatomic) UIFont *disabledFont;
- (void) setFont:(UIFont *)font forState:(NSUInteger)state;
@end
ConfigurableButton.m
#import "ConfigurableButton.h"
@implementation ConfigurableButton
- (void) setFont:(UIFont *)font forState:(NSUInteger)state
{
switch (state) {
case UIControlStateNormal:
{
self.normalFont = font;
break;
}
case UIControlStateHighlighted:
{
self.highlightedFont = font;
break;
}
case UIControlStateDisabled:
{
self.disabledFont = font;
break;
}
case UIControlStateSelected:
{
self.selectedFont = font;
break;
}
default:
{
self.normalFont = font;
break;
}
}
}
- (void) layoutSubviews
{
NSUInteger state = self.state;
switch (state) {
case UIControlStateNormal:
{
[self setTitleFont:_normalFont];
break;
}
case UIControlStateHighlighted:
{
[self setTitleFont:_highlightedFont];
break;
}
case UIControlStateDisabled:
{
[self setTitleFont:_disabledFont];
break;
}
case UIControlStateSelected:
{
[self setTitleFont:_selectedFont];
break;
}
default:
{
[self setTitleFont:_normalFont];
break;
}
}
[super layoutSubviews];
}
- (void) setTitleFont:(UIFont *)font
{
if (!font) {
font = [UIFont systemFontOfSize:15];
}
self.titleLabel.font = font;
}
@end