Fuente personalizada en un storyboard?

Tengo una fuente agregada a mi proyecto iOS. Está en el proyecto y se copy cuando se construye el proyecto. Parece ser una fuente válida y aparecerá si enumero todas las fonts en el dispositivo a través de la aplicación. Tengo el plist configurado correctamente para include la fuente. Parece que no puedo encontrar el hallazgo para utilizarlo en mis controles de text, botones, etc. en la sección de guiones charts de Xcode 4.2. Además, no parece permitirme escribir el nombre de la fuente, me obliga a usar el dialog de fuente. También intenté instalar esta fuente en el sistema, pero parece que no puedo mostrarla en esta list. ¿Debo hacer esto solo en código o puedo hacerlo a través de la interfaz de storyboard?

Tenga en count que puedo conseguir que esto funcione en código, pero sería mucho más conveniente hacerlo a través del storyboard.

ACTUALIZACIÓN: Xcode 6 Interface Builder ahora le permite seleccionar fonts personalizadas y las renderizará en time de layout correctamente.

Sé que esta pregunta es bastante antigua, pero he estado luchando para encontrar una manera fácil de especificar una fuente personalizada en Storyboard (o Interface Builder) fácilmente para iOS 5 y encontré una solución bastante conveniente.

Primero, asegúrese de haber agregado la fuente al proyecto siguiendo este tutorial . Recuerde también que la fuente personalizada UINavigationBar, UITabBar y UISegmentedControl se puede especificar mediante el método setTitleTextAttributes: del proxy UIAppearance .

Agregue las categorías a continuación al proyecto para UIButton, UITextField, UILabel y cualquier otro componente que necesite una fuente personalizada. Las categorías simplemente implementan una nueva propiedad fontName que cambia la fuente actual del elemento mientras se mantiene el tamaño de fuente.

Para especificar la fuente en Storyboard, simplemente select el elemento deseado (label, button, vista de text, etc.) y agregue un atributo de time de ejecución definido por el usuario con la ruta key configurada en fontName de tipo Cadena y valor con el nombre de su fuente personalizada.

Custom font Storyboard

Y eso es todo, ni siquiera necesitas importar las categorías. De esta forma, no necesita una salida para cada componente de interfaz de usuario que requiera una fuente personalizada y no necesita codificarla manualmente.

Tenga en count que la fuente no se mostrará en Storyboard, pero la verá cuando se ejecute en su dispositivo o simulador.


Archivos de categoría

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 

También se puede download de GIST y también como un solo file .

Solución de problemas

Si ejecuta errores de time de ejecución porque la propiedad fontName no está especificada, simplemente agregue el indicador -all_load en Otras banderas de linker en la configuration del proyecto para obligar al linker a include las categorías.

Desde Xcode6.0, como nota de lanzamiento de Xcode6.0 :

Interface Builder genera fonts iOS personalizadas incrustadas durante el time de layout, proporcionando una vista previa más precisa de cómo se verá la aplicación terminada, con las dimensiones correctas.

puede establecer la fuente de la label en el guión gráfico. Puede hacer lo siguiente

  1. Obtenga su file de fuente personalizado ( .ttf, .ttc)
  2. Importa los files de fuente a tu proyecto Xcode

    introduzca la descripción de la imagen aquí

  3. En app-info.plist , agrega una key llamada Fonts proporcionada por la aplicación . Es un tipo de matriz, agrega todo tu nombre de file de fuente a la matriz, nota: incluye la extensión de file.

introduzca la descripción de la imagen aquí

  1. En el guión gráfico, arrastre una interfaz de UILabel a usted, select la label y navegue hasta el Inspector de attributes , click el button del ícono derecho del área de selección de fuente . En el panel emergente, elija Fuente a personalizada y elija la familia de usted insertada nombre de la fuente.

introduzca la descripción de la imagen aquí

ref a

  • Notas de la versión de Xcode 6.0
  • WWDC 2014 Novedades en Interface Builder
  • IOS-Keys: UIAppFonts

Este es un error en XCode, estado allí desde 3.x y aún no está arreglado. Yo también he enfrentado el mismo problema, incluso traté de agregarlo a mi sistema sin suerte. Aquí hay otra publicación de SO sobre ella. Fuentes que no se muestran en Interface Builder.

La respuesta de Monjer es la correcta. Si usted, como yo, no ve la fuente añadida después de comstackr, asegúrese de agregar las fonts a las fases de compilation (destinos -> comstackr fases -> copyr resources de package -> agregar sus files de fuente)

¡La solución de networkingent84 fue increíble!

Acabo de agregar una mejora, agrega la categoría en NSObject, así que solo debes hacerlo una vez.

NSObject + CustomFont.h

 #import <Foundation/Foundation.h> @interface NSObject (CustomFont) @property (strong, nonatomic) NSString *fontName; @property (strong, nonatomic) UIFont *font; @end 

NSObject + CustomFont.m

 #import "NSObject+CustomFont.h" @implementation NSObject (CustomFont) @dynamic font; - (NSString *)fontName { return self.font.fontName; } - (void)setFontName:(NSString *)fontName { self.font = [UIFont fontWithName:fontName size:self.font.pointSize]; } @end 

Ninguno de estos funcionó para mí, pero esto sí lo hizo.

 #import <UIKit/UIKit.h> @interface UILabelEx : UILabel @end #import "UILabelEx.h" #import "Constants.h" @implementation UILabelEx - (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection { [super traitCollectionDidChange: previousTraitCollection]; self.font = [UIFont fontWithName:APP_FONT size:self.font.pointSize]; } @end