Tengo un UIBarButtonItem
en mi UIToolbar
titulado Listo . Ahora quiero cambiar la fuente por defecto a "Trebuchet MS" con Bold. ¿Cómo puedo hacer eso?
Tengo un UIBarButtonItem
en mi UIToolbar
titulado Listo . Ahora quiero cambiar la fuente por defecto a "Trebuchet MS" con Bold. ¿Cómo puedo hacer eso?
Respuestas:
Como UIBarButtonItem hereda de UIBarItem, puede intentar
- (void)setTitleTextAttributes:(NSDictionary *)attributes
forState:(UIControlState)state
pero esto es solo para iOS5. Para iOS 3/4, deberá usar una vista personalizada.
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];
Por conveniencia, aquí está la implementación de Swift:
buttonItem.setTitleTextAttributes([
NSAttributedStringKey.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
NSAttributedStringKey.foregroundColor: UIColor.green],
for: .normal)
Para aquellos interesados en usar el UIAppearance
estilo de sus UIBarButtonItem
fuentes en toda la aplicación, se puede lograr usando 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
UIBarButtonItem.appearance().setTitleTextAttributes(
[
NSFontAttributeName : UIFont(name: "HelveticaNeue-Light", size: 12)!,
NSForegroundColorAttributeName : UIColor.white,
], for: .normal)
Swift 4
UIBarButtonItem.appearance().setTitleTextAttributes(
[
NSAttributedStringKey.font : UIFont(name: "HelveticaNeue-Light", size: 12)!,
NSAttributedStringKey.foregroundColor : UIColor.white,
], for: .normal)
O para un solo UIBarButtonItem (no para toda la aplicación), si tiene una fuente personalizada para un botón en particular:
Swift 3
let barButtonItem = UIBarButton()
barButtonItem.setTitleTextAttributes([
NSFontAttributeName : UIFont(name: "FontAwesome", size: 26)!,
NSForegroundColorAttributeName : UIColor.white,
], for: .normal)
barButtonItem.title = "\u{f02a}"
Swift 4
let barButtonItem = UIBarButton()
barButtonItem.setTitleTextAttributes([
NSAttributedStringKey.font : UIFont(name: "FontAwesome", size: 26)!,
NSAttributedStringKey.foregroundColor : UIColor.white,
], for: .normal)
barButtonItem.title = "\u{f02a}"
Por supuesto, puede cambiar la fuente y el tamaño a lo que desee. Prefiero poner este código en el AppDelegate.m
archivo en la didFinishLaunchingWithOptions
sección.
Atributos disponibles (solo agréguelos a NSDictionary
):
NSFontAttributeName
: Cambiar fuente con un UIFont
NSForegroundColorAttributeName
: Cambiar color con un UIColor
NSShadow
: Agregar una sombra paralela (ver NSShadow
referencia de clase)(Actualizado para iOS7 +)
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 anteriores. Solo actualizando para iOS7:
NSDictionary *barButtonAppearanceDict = @{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Thin" size:18.0] , NSForegroundColorAttributeName: [UIColor whiteColor]};
[[UIBarButtonItem appearance] setTitleTextAttributes:barButtonAppearanceDict forState:UIControlStateNormal];
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];
Para hacer esto para algunos UIBarButtonItems
pero no para todos, recomiendo el siguiente enfoque.
UIBarButtonItem
subclase. No le agregue nada, solo lo usará como una clase personalizada en el guión gráfico y por su proxy de apariencia ...UIBarButtonItems
a su subclaseUIBarButtonItem
subclase y agregue la siguiente línea aapplication:didFinishLaunchingWithOptions:
En mi caso, subclasifiqué UIBarButtonItem
con el único propósito de poner en negrita el texto:
[[BoldBarButtonItem appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont boldSystemFontOfSize:18.0], NSFontAttributeName,nil]
forState:UIControlStateNormal];
En Swift 4 , puede cambiar la fuente y el color UIBarButtonItem
agregando el siguiente código.
addTodoBarButton.setTitleTextAttributes(
[
NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Bold", size: 17)!,
NSAttributedStringKey.foregroundColor: UIColor.black
], for: .normal)
Esta es la forma correcta: declare su barButtonItem (en este caso rightBarButtonItem) y agréguelo setTitleTextAttributes.
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Go!", style: .plain, target: self, action: #selector(yourFuncDestination))
después de que pueda agregar atributos de título
navigationItem.rightBarButtonItem?.setTitleTextAttributes([.font : UIFont.systemFont(ofSize: 18, weight: .bold), .foregroundColor : UIColor.white], for: .normal)
puedes cambiar el tamaño, el peso (. negrita, .pesado, .regular, etc.) y el color como prefieras ... Espero que esto ayude :)
Implementación de Swift 5
rightButtonItem.setTitleTextAttributes([
NSAttributedString.Key.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
NSAttributedString.Key.foregroundColor: UIColor.green],
for: .normal)
En toda la aplicación:
if let font = UIFont(name: "AvenirNext-DemiBold", size: 15) {
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: font,NSForegroundColorAttributeName:TOOLBAR_TITLE_COLOR], forState: UIControlState.Normal)
}
Suponiendo que desea admitir iOS4 y versiones anteriores, su mejor opción es crear un botón de barra utilizando el initWithCustomView:
método 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 barra de navegación en Interface Builder si desea crear el botón con arrastrar y soltar en lugar de 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.
Puede crear una UIView
programación personalizada :
UIView *buttonItemView = [[UIView alloc] initWithFrame:buttonFrame];
Luego agregue imágenes, etiquetas o lo que quiera a su 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.
Para completar, me gustaría agregar este método, que todavía se usa en Objective-C en 2019. :)
_titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
_titleLabel.text = _titleBarButtonItem.title;
_titleLabel.textColor = UIColor.whiteColor;
_titleLabel.font = [UtilityMethods appFontProDisplayBold:26.0];
[_titleLabel sizeToFit];
UIBarButtonItem *titleLabelItem = [[UIBarButtonItem alloc] initWithCustomView:_titleLabel];