¿Cómo configuro una fuente personalizada para toda la aplicación?

¿Hay alguna manera de cómo aplicar una fuente global [nueva fuente personalizada] a una aplicación completa en el iPhone objective-c?

Sé que podemos usar el siguiente método para establecer la fuente para cada label

[self.titleLabel setFont:[UIFont fontWithName:@"FONOT_NAME" size:FONT_SIZE]]; 

Pero quiero cambiar para una aplicación completa. Por favor, ayúdame si alguien sabe.

Al parecer, para cambiar TODO UILabels por completo, deberá configurar una categoría en UILabel y cambiar la fuente pnetworkingeterminada. Entonces, aquí tienes una solución:

Cree un file CustomFontLabel.h

 @interface UILabel(changeFont) - (void)awakeFromNib; -(id)initWithFrame:(CGRect)frame; @end 

Cree un file CustomFontLabel.m

 @implementation UILabel(changeFont) - (void)awakeFromNib { [super awakeFromNib]; [self setFont:[UIFont fontWithName:@"Zapfino" size:12.0]]; } -(id)initWithFrame:(CGRect)frame { id result = [super initWithFrame:frame]; if (result) { [self setFont:[UIFont fontWithName:@"Zapfino" size:12.0]]; } return result; } @end 

Ahora … en cualquier controller de vista, quiere estas tags de fuente personalizadas, solo incluya en la parte superior:

 #import "CustomFontLabel.h" 

Eso es todo, buena suerte.

La solución de Ican con la categoría podría preferirse solo para salvar el día. Pero evite usar la categoría para anular los methods existentes, ya que apple explica: Evite el nombre del método de categoría.

… Si el nombre de un método declarado en una categoría es el mismo que un método en la class original o un método en otra categoría en la misma class (o incluso una superclass), el comportamiento no está definido en cuanto a la implementación del método se usa en time de ejecución. …

Tenga en count también que anular -(id) init; sería más seguro que anular -(id)initWithFrame:(CGRect)frame . No enfrentarás el problema de no recibir events táctiles onclick en una label en los botones UIB.

¿Es esto lo que quieres decir?

 @interface GlobalMethods +(UIFont *)appFont; @end @implementation GlobalMethods +(UIFont *)appFont{ return [UIFont fontWithName:@"someFontName" size:someFontSize]; } @end ... [self.titleLabel setFont:[GlobalMethods appFont]]; 

En caso de que quiera hacerlo de forma automática (sin usar setFont en cada control), no creo que sea posible.

Si puede limitar su aplicación, o esta característica en particular, a iOS 5, se producirá una nueva API que le permitirá eliminar la interfaz de usuario pnetworkingeterminada muy convenientemente. No puedo darte detalles, ya que todavía están bajo NDA en el momento en que escribo esto. Echa un vistazo a iOS 5 beta SDK para get más información.