2012-01-13 22 views

Respuesta

107

Debido UIBarButtonItem hereda de UIBarItem, puede intentar

- (void)setTitleTextAttributes:(NSDictionary *)attributes 
        forState:(UIControlState)state 

pero esto es sólo el iOS5. Para iOS 3/4, deberás usar una vista personalizada.

+0

Belay de eso, tuve un problema que está funcionando bien ahora. –

+0

Aha! ¡Finalmente, te encontré @teriiehina! – Martin

+0

@Martin No me estaba escondiendo :) – teriiehina

0

UIBarButton no tienen propiedades relacionadas con el cambio de la fuente. Pero puede crear un botón con una fuente personalizada y luego agregarlo a UIBarButton. Puede solucionar su problema

0

Suponiendo que desea admitir iOS4 y anteriores, su mejor opción es crear un botón de barra usando el método initWithCustomView: y proporcionar su propia vista que podría ser algo así como un UIButton donde puede personalizar fácilmente el fuente.

También puede arrastrar un UIButton a una barra de herramientas o una barra de navegación en Interface Builder si desea crear el botón arrastrando y soltando en lugar de hacerlo mediante programación.

Lamentablemente, esto significa crear usted mismo la imagen de fondo del botón. No hay forma de personalizar la fuente de un UIBarButtonItem estándar antes de iOS5.

0

Se puede crear una costumbre UIView programación:

UIView *buttonItemView = [[UIView alloc] initWithFrame:buttonFrame]; 

A continuación, añadir imágenes, etiquetas o lo que quiera a la vista personalizada:

[buttonItemView addSubview:customImage]; 

[buttonItemView addSubview:customLabel]; 

... 

Ahora ponerlo en su UIBarButtomItem.

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:buttonItemView]; 

Y finalmente agregue barButtonItem a su barra de navegación.

187

Para ser precisos, esto se puede hacer de la siguiente manera

[buttonItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: 
    [UIFont fontWithName:@"Helvetica-Bold" size:26.0], NSFontAttributeName, 
    [UIColor greenColor], NSForegroundColorAttributeName, 
    nil] 
          forState:UIControlStateNormal]; 

O con la sintaxis literal de objeto:

[buttonItem setTitleTextAttributes:@{ 
    NSFontAttributeName: [UIFont fontWithName:@"Helvetica-Bold" size:26.0], 
    NSForegroundColorAttributeName: [UIColor greenColor] 
} forState:UIControlStateNormal]; 

Por conveniencia, aquí está la aplicación Swift:

buttonItem.setTitleTextAttributes([ 
     NSFontAttributeName: UIFont(name: "Helvetica-Bold", size: 26.0)!, 
     NSForegroundColorAttributeName: UIColor.greenColor()], 
    forState: UIControlState.Normal) 
+2

NSFontAttributeName debe utilizarse en su lugar UITextAttributeFont, y NSForegroundColorAttributeName debe ser en lugar de UITextAttributeTextColor cuando se desarrolla para IOS7. – Raz

+0

¡Gracias! Está funcionando bien. – Raja

87

Para aquellos interesados ​​en usar UIAppearance para diseñar sus fuentes UIBarButtonItem en t que la aplicación, pueden llevarse a cabo utilizando esta línea de código:

Objetivo C:

NSDictionary *barButtonAppearanceDict = @{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Light" size:12.0], NSForegroundColorAttributeName: [UIColor whiteColor]}; 
[[UIBarButtonItem appearance] setTitleTextAttributes:barButtonAppearanceDict forState:UIControlStateNormal]; 

Swift 2.3:

UIBarButtonItem.appearance().setTitleTextAttributes(
[ 
    NSFontAttributeName : UIFont(name: "HelveticaNeue-Light", size: 12)!, 
    NSForegroundColorAttributeName : UIColor.white 
], 
for: .normal) 

Swift 3,0/4

UIBarButtonItem.appearance().setTitleTextAttributes(
[ 
    NSFontAttributeName : UIFont(name: "HelveticaNeue-Light", size: 12)!, 
    NSForegroundColorAttributeName : UIColor.white, 
], for: .normal) 

o para una sola UIBarButtonItem (no para todos aplicación de ancho), si tiene una fuente personalizada para un botón en particular:

let barButtonItem = UIBarButton() 
barButtonItem.setTitleTextAttributes([ 
    NSFontAttributeName : UIFont(name: "FontAwesome", size: 26)!, 
    NSForegroundColorAttributeName : UIColor.white, 
], for: .normal) 
barButtonItem.title = "\u{f02a}" 

Por supuesto, puede cambiar el tamaño de la fuente & a lo que desee. Prefiero poner este código en el archivo AppDelegate.m en la sección didFinishLaunchingWithOptions.

atributos disponibles (hay que añadirlas a la NSDictionary):

  • NSFontAttributeName: Cambio de fuente con un UIFont
  • NSForegroundColorAttributeName: Cambio de color con un UIColor
  • NSShadow: Añadir una gota de sombra (ver NSShadow class reference)

(Actualizado para iOS7 +)

+3

Las claves UITextAttribute .. están en desuso a partir de iOS7. Use NSFontAttribute ... y NSForeground ... etc. en su lugar. –

+2

He actualizado las depreciaciones introducidas en iOS7. Gracias por el aviso, @EmmanuelAy! – rog

+0

¡Fantástico! Mi aplicación se ve hermosa ahora (bueno, a mi manera, eso es !!: P) Gracias – Septronic

7

Para hacer esto para algunos UIBarButtonItems pero no todos, recomiendo el siguiente enfoque.

  1. Crea una subclase UIBarButtonItem. No añada nada a ella - sólo se va a usar como una clase personalizada en el guión gráfico y por su apariencia de proxy ...
  2. En el guión gráfico, cambiar la clase personalizada para todos UIBarButtonItems deseada a la subclase
  3. En su AppDelegate importar su UIBarButtonItem subclase y añadir la siguiente línea a application:didFinishLaunchingWithOptions:

En mi caso subclases UIBarButtonItem con el único propósito de escribir en negrita el texto:

[[BoldBarButtonItem appearance] setTitleTextAttributes: 
    [NSDictionary dictionaryWithObjectsAndKeys: 
    [UIFont boldSystemFontOfSize:18.0], NSFontAttributeName,nil] 
               forState:UIControlStateNormal]; 
16

Estas son excelentes respuestas arriba.Sólo la actualización de iOS7:

NSDictionary *barButtonAppearanceDict = @{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Thin" size:18.0] , NSForegroundColorAttributeName: [UIColor whiteColor]}; 
    [[UIBarButtonItem appearance] setTitleTextAttributes:barButtonAppearanceDict forState:UIControlStateNormal]; 
18

En Swift podría hacer esto como sigue:

backButtonItem.setTitleTextAttributes([ 
     NSFontAttributeName : UIFont(name: "Helvetica-Bold", size: 26)!, 
     NSForegroundColorAttributeName : UIColor.blackColor()], 
    forState: UIControlState.Normal) 
+1

No olvides el signo de exclamación (!) Después de la fuente. El mensaje de error: "'_' no es convertible a 'Cadena'" no es realmente útil. – Ciryon

15

Swift3

buttonName.setAttributedTitle([ 
     NSFontAttributeName : UIFont.systemFontOfSize(18.0), 
     NSForegroundColorAttributeName : UIColor.red,NSBackgroundColorAttributeName:UIColor.black], 
            forState: UIControlState.Normal) 

rápida

barbutton.setTitleTextAttributes([ 
     NSFontAttributeName : UIFont.systemFontOfSize(18.0), 
     NSForegroundColorAttributeName : UIColor.redColor(),NSBackgroundColorAttributeName:UIColor.blackColor()], 
     forState: UIControlState.Normal) 

Objective-C

 [ barbutton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: 
     [UIFont fontWithName:@"Helvetica-Bold" size:20.0], NSFontAttributeName, 
     [UIColor redColor], NSForegroundColorAttributeName,[UIColor blackColor],NSBackgroundColorAttributeName, 
     nil] 
     forState:UIControlStateNormal]; 
1

A lo largo de la aplicación:

if let font = UIFont(name: "AvenirNext-DemiBold", size: 15) { 
     UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: font,NSForegroundColorAttributeName:TOOLBAR_TITLE_COLOR], forState: UIControlState.Normal) 

    } 
2

rápida 3

barButtonName.setTitleTextAttributes([NSFontAttributeName : UIFont.systemFont(ofSize: 18.0),NSForegroundColorAttributeName : UIColor.white], for: .normal) 
Cuestiones relacionadas