ios - Cambiar la fuente de un UIBarButtonItem
cocoa-touch (12)
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)
}
Tengo un UIBarButtonItem
en mi UIToolbar
titulado Done . Ahora quiero cambiar la fuente de la predeterminada a "Trebuchet MS" con negrita. ¿Cómo puedo hacer eso?
Como UIBarButtonItem hereda de UIBarItem, puedes probar
- (void)setTitleTextAttributes:(NSDictionary *)attributes
forState:(UIControlState)state
pero esto es solo para iOS5. Para iOS 3/4, deberás usar una vista personalizada.
En Swift harías esto de la siguiente manera:
backButtonItem.setTitleTextAttributes([
NSFontAttributeName : UIFont(name: "Helvetica-Bold", size: 26)!,
NSForegroundColorAttributeName : UIColor.blackColor()],
forState: UIControlState.Normal)
Estas son excelentes respuestas arriba. Solo estoy actualizando para iOS7:
NSDictionary *barButtonAppearanceDict = @{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Thin" size:18.0] , NSForegroundColorAttributeName: [UIColor whiteColor]};
[[UIBarButtonItem appearance] setTitleTextAttributes:barButtonAppearanceDict forState:UIControlStateNormal];
Para aquellos interesados en utilizar UIAppearance
para UIBarButtonItem
las fuentes de su UIBarButtonItem
toda la aplicación, se puede lograr utilizando esta línea de código:
C objetivo:
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 un solo UIBarButtonItem (no para todas las aplicaciones), 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, puedes cambiar la fuente y el tamaño a lo que quieras. Prefiero poner este código en el archivo AppDelegate.m
en la sección didFinishLaunchingWithOptions
.
Atributos disponibles (simplemente agréguelos al NSDictionary
):
-
NSFontAttributeName
: cambia la fuente con unUIFont
-
NSForegroundColorAttributeName
: cambia el color conUIColor
-
NSShadow
: agregue una sombraNSShadow
(consulte la referencia de la claseNSShadow
)
(Actualizado para iOS7 +)
Para hacer esto para algunos UIBarButtonItems
pero no todos, recomiendo el siguiente enfoque.
- Cree una subclase
UIBarButtonItem
. No le agregue nada; solo lo usará como una clase personalizada en el guión gráfico y para su proxy de aparición ... - En su guión gráfico, cambie la clase personalizada para todos los
UIBarButtonItems
deseados a su subclase - En su AppDelegate, importe su subclase
UIBarButtonItem
y agregue la siguiente línea a laapplication:didFinishLaunchingWithOptions:
En mi caso, UIBarButtonItem
con el único propósito de doblar el texto:
[[BoldBarButtonItem appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont boldSystemFontOfSize:18.0], NSFontAttributeName,nil]
forState:UIControlStateNormal];
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 del objeto:
[buttonItem setTitleTextAttributes:@{
NSFontAttributeName: [UIFont fontWithName:@"Helvetica-Bold" size:26.0],
NSForegroundColorAttributeName: [UIColor greenColor]
} forState:UIControlStateNormal];
Para su comodidad, aquí está la implementación de Swift:
buttonItem.setTitleTextAttributes([
NSAttributedStringKey.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
NSAttributedStringKey.foregroundColor: UIColor.green],
for: .normal)
Puede crear un UIView
personalizado UIView
programación:
UIView *buttonItemView = [[UIView alloc] initWithFrame:buttonFrame];
Luego agrega imágenes, etiquetas o lo que quieras a tu vista personalizada:
[buttonItemView addSubview:customImage];
[buttonItemView addSubview:customLabel];
...
Ahora ponlo en tu UIBarButtomItem
.
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:buttonItemView];
Y finalmente agregue barButtonItem a su barra de navegación.
Suponiendo que desea soportar iOS4 y versiones anteriores, su mejor opción es crear un botón de barra con el método initWithCustomView:
y proporcionar su propia vista que podría ser algo así como un UIButton donde puede personalizar fácilmente la 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.
Desafortunadamente, esto significa crear la imagen de fondo del botón usted mismo. No hay forma de personalizar la fuente de un UIBarButtonItem estándar antes de iOS5.
veloz 3
barButtonName.setTitleTextAttributes( [NSFontAttributeName : UIFont.systemFont(ofSize: 18.0),NSForegroundColorAttributeName : UIColor.white], for: .normal)
UIBarButton
no tiene propiedad relacionada para cambiar la fuente. Pero puede crear un botón con una fuente personalizada y luego agregarlo a UIBarButton. Puede ser solucionado tu problema
Swift3
buttonName.setAttributedTitle([
NSFontAttributeName : UIFont.systemFontOfSize(18.0),
NSForegroundColorAttributeName : UIColor.red,NSBackgroundColorAttributeName:UIColor.black],
forState: UIControlState.Normal)
rápido
barbutton.setTitleTextAttributes([
NSFontAttributeName : UIFont.systemFontOfSize(18.0),
NSForegroundColorAttributeName : UIColor.redColor(),NSBackgroundColorAttributeName:UIColor.blackColor()],
forState: UIControlState.Normal)
C objetivo
[ barbutton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"Helvetica-Bold" size:20.0], NSFontAttributeName,
[UIColor redColor], NSForegroundColorAttributeName,[UIColor blackColor],NSBackgroundColorAttributeName,
nil]
forState:UIControlStateNormal];