Cambiar la fuente de un UIBarButtonItem
Tengo un UIBarButtonItem
en mi UIToolbar
titulado Hecho. Ahora quiero cambiar la fuente de forma predeterminada a "Trebuchet MS" con Bold. ¿Cómo puedo hacer eso?
Cambiar la fuente de un UIBarButtonItem
Tengo un UIBarButtonItem
en mi UIToolbar
titulado Hecho. Ahora quiero cambiar la fuente de forma predeterminada a "Trebuchet MS" con Bold. ¿Cómo puedo hacer eso?
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.
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
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.
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.
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)
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 +)
Las claves UITextAttribute .. están en desuso a partir de iOS7. Use NSFontAttribute ... y NSForeground ... etc. en su lugar. –
He actualizado las depreciaciones introducidas en iOS7. Gracias por el aviso, @EmmanuelAy! – rog
¡Fantástico! Mi aplicación se ve hermosa ahora (bueno, a mi manera, eso es !!: P) Gracias – Septronic
Para hacer esto para algunos UIBarButtonItems
pero no todos, recomiendo el siguiente enfoque.
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 ...UIBarButtonItems
deseada a la subclaseUIBarButtonItem
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];
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];
En Swift podría hacer esto como sigue:
backButtonItem.setTitleTextAttributes([
NSFontAttributeName : UIFont(name: "Helvetica-Bold", size: 26)!,
NSForegroundColorAttributeName : UIColor.blackColor()],
forState: UIControlState.Normal)
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
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];
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)
}
rápida 3
barButtonName.setTitleTextAttributes([NSFontAttributeName : UIFont.systemFont(ofSize: 18.0),NSForegroundColorAttributeName : UIColor.white], for: .normal)
Belay de eso, tuve un problema que está funcionando bien ahora. –
Aha! ¡Finalmente, te encontré @teriiehina! – Martin
@Martin No me estaba escondiendo :) – teriiehina