
Tengo un UIBarButtonItemen mi UIToolbartitulado Listo . Ahora quiero cambiar la fuente por defecto a "Trebuchet MS" con Bold. ¿Cómo puedo hacer eso?

Tengo un UIBarButtonItemen mi UIToolbartitulado 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 UIAppearanceestilo de sus UIBarButtonItemfuentes 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.marchivo en la didFinishLaunchingWithOptionssección.
Atributos disponibles (solo agréguelos a NSDictionary):
NSFontAttributeName: Cambiar fuente con un UIFontNSForegroundColorAttributeName: Cambiar color con un UIColorNSShadow: Agregar una sombra paralela (ver NSShadowreferencia 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 UIBarButtonItemspero no para todos, recomiendo el siguiente enfoque.
UIBarButtonItemsubclase. No le agregue nada, solo lo usará como una clase personalizada en el guión gráfico y por su proxy de apariencia ...UIBarButtonItemsa su subclaseUIBarButtonItemsubclase y agregue la siguiente línea aapplication:didFinishLaunchingWithOptions:En mi caso, subclasifiqué UIBarButtonItemcon 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 UIBarButtonItemagregando 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 UIViewprogramació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];