Changer la police d’un UIBarButtonItem

UIToolbar avec UIBarButtonItem

J’ai un UIBarButtonItem dans ma UIToolbar intitulé Done . Maintenant, je veux changer la police par défaut à “Trebuchet MS” avec gras. Comment puis je faire ça?

Comme UIBarButtonItem hérite de UIBarItem, vous pouvez essayer

 - (void)setTitleTextAtsortingbutes:(NSDictionary *)atsortingbutes forState:(UIControlState)state 

mais c’est uniquement pour iOS5. Pour iOS 3/4, vous devrez utiliser une vue personnalisée.

Pour être précis, cela peut être fait comme ci-dessous

 [buttonItem setTitleTextAtsortingbutes:[NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName:@"Helvetica-Bold" size:26.0], NSFontAtsortingbuteName, [UIColor greenColor], NSForegroundColorAtsortingbuteName, nil] forState:UIControlStateNormal]; 

Ou avec la syntaxe littérale d’object:

 [buttonItem setTitleTextAtsortingbutes:@{ NSFontAtsortingbuteName: [UIFont fontWithName:@"Helvetica-Bold" size:26.0], NSForegroundColorAtsortingbuteName: [UIColor greenColor] } forState:UIControlStateNormal]; 

Pour plus de commodité, voici la mise en œuvre de Swift:

 buttonItem.setTitleTextAtsortingbutes([ NSAtsortingbutedSsortingngKey.font: UIFont(name: "Helvetica-Bold", size: 26.0)!, NSAtsortingbutedSsortingngKey.foregroundColor: UIColor.green], for: .normal) 

Pour ceux qui souhaitent utiliser UIAppearance pour UIAppearance le style de leurs fonts UIBarButtonItem dans l’application, vous pouvez utiliser cette ligne de code:

Objectif c:

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

Swift 2.3:

 UIBarButtonItem.appearance().setTitleTextAtsortingbutes( [ NSFontAtsortingbuteName : UIFont(name: "HelveticaNeue-Light", size: 12)!, NSForegroundColorAtsortingbuteName : UIColor.white ], for: .normal) 

Swift 3

 UIBarButtonItem.appearance().setTitleTextAtsortingbutes( [ NSFontAtsortingbuteName : UIFont(name: "HelveticaNeue-Light", size: 12)!, NSForegroundColorAtsortingbuteName : UIColor.white, ], for: .normal) 

Rapide 4

 UIBarButtonItem.appearance().setTitleTextAtsortingbutes( [ NSAtsortingbutedSsortingngKey.font : UIFont(name: "HelveticaNeue-Light", size: 12)!, NSAtsortingbutedSsortingngKey.foregroundColor : UIColor.white, ], for: .normal) 

Ou pour un seul UIBarButtonItem (pas pour toutes les applications), si vous avez une police personnalisée pour un bouton en particulier:

Swift 3

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

Rapide 4

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

Bien sûr, vous pouvez changer la police et la taille en fonction de ce que vous voulez. Je préfère mettre ce code dans le fichier AppDelegate.m dans la section didFinishLaunchingWithOptions .

Atsortingbuts disponibles (ajoutez-les simplement au NSDictionary ):

  • NSFontAtsortingbuteName : Changer la police avec un UIFont
  • NSForegroundColorAtsortingbuteName : change de couleur avec un UIColor
  • NSShadow : Ajouter une ombre scope (voir référence de la classe NSShadow )

(Mis à jour pour iOS7 +)

Dans Swift, vous le feriez comme suit:

 backButtonItem.setTitleTextAtsortingbutes([ NSFontAtsortingbuteName : UIFont(name: "Helvetica-Bold", size: 26)!, NSForegroundColorAtsortingbuteName : UIColor.blackColor()], forState: UIControlState.Normal) 

Ce sont d’excellentes réponses ci-dessus. Juste mise à jour pour iOS7:

 NSDictionary *barButtonAppearanceDict = @{NSFontAtsortingbuteName : [UIFont fontWithName:@"HelveticaNeue-Thin" size:18.0] , NSForegroundColorAtsortingbuteName: [UIColor whiteColor]}; [[UIBarButtonItem appearance] setTitleTextAtsortingbutes:barButtonAppearanceDict forState:UIControlStateNormal]; 

Swift3

  buttonName.setAtsortingbutedTitle([ NSFontAtsortingbuteName : UIFont.systemFontOfSize(18.0), NSForegroundColorAtsortingbuteName : UIColor.red,NSBackgroundColorAtsortingbuteName:UIColor.black], forState: UIControlState.Normal) 

rapide

  barbutton.setTitleTextAtsortingbutes([ NSFontAtsortingbuteName : UIFont.systemFontOfSize(18.0), NSForegroundColorAtsortingbuteName : UIColor.redColor(),NSBackgroundColorAtsortingbuteName:UIColor.blackColor()], forState: UIControlState.Normal) 

Objectif c

  [ barbutton setTitleTextAtsortingbutes:[NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName:@"Helvetica-Bold" size:20.0], NSFontAtsortingbuteName, [UIColor redColor], NSForegroundColorAtsortingbuteName,[UIColor blackColor],NSBackgroundColorAtsortingbuteName, nil] forState:UIControlStateNormal]; 

Pour ce faire, certains UIBarButtonItems mais pas tous, je recommande l’approche suivante.

  1. Créez une sous-classe UIBarButtonItem . N’ajoutez rien – vous ne l’utiliserez que comme classe personnalisée dans le storyboard et pour son proxy d’apparence …
  2. Dans votre storyboard, remplacez la classe personnalisée de tous les UIBarButtonItems souhaités par votre sous-classe.
  3. Dans votre AppDelegate, importez votre sous-classe UIBarButtonItem et ajoutez la ligne suivante à l’ application:didFinishLaunchingWithOptions:

Dans mon cas, j’ai sous- UIBarButtonItem dans le seul but de mettre en gras le texte:

 [[BoldBarButtonItem appearance] setTitleTextAtsortingbutes: [NSDictionary dictionaryWithObjectsAndKeys: [UIFont boldSystemFontOfSize:18.0], NSFontAtsortingbuteName,nil] forState:UIControlStateNormal]; 

swift 3

 barButtonName.setTitleTextAtsortingbutes( [NSFontAtsortingbuteName : UIFont.systemFont(ofSize: 18.0),NSForegroundColorAtsortingbuteName : UIColor.white], for: .normal) 

Dans Swift 4 , vous pouvez modifier la police et la couleur de UIBarButtonItem en ajoutant le code suivant.

 addTodoBarButton.setTitleTextAtsortingbutes( [ NSAtsortingbutedSsortingngKey.font: UIFont(name: "HelveticaNeue-Bold", size: 17)!, NSAtsortingbutedSsortingngKey.foregroundColor: UIColor.black ], for: .normal) 

Tout au long de l’application:

 if let font = UIFont(name: "AvenirNext-DemiBold", size: 15) { UIBarButtonItem.appearance().setTitleTextAtsortingbutes([NSFontAtsortingbuteName: font,NSForegroundColorAtsortingbuteName:TOOLBAR_TITLE_COLOR], forState: UIControlState.Normal) } 

UIBarButton n’a pas de propriété liée à la modification de la police. Mais vous pouvez créer un bouton avec une police personnalisée, puis l’append à UIBarButton. Il peut être résolu votre problème

En supposant que vous vouliez prendre en charge iOS4 et les versions antérieures, le mieux est de créer un bouton de barre à l’aide de la méthode initWithCustomView: et de fournir votre propre vue qui pourrait ressembler à un UIButton où vous pouvez facilement personnaliser la police.

Vous pouvez également faire glisser un UIButton sur une barre d’outils ou une barre de navigation dans Interface Builder si vous souhaitez créer le bouton par glisser-déposer plutôt que par programmation.

Malheureusement, cela signifie créer vous-même l’image d’arrière-plan du bouton. Il n’y a aucun moyen de personnaliser la police d’un UIBarButtonItem standard avant iOS5.

Vous pouvez créer un UIView personnalisé UIView programmation:

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

Ajoutez ensuite des images, des étiquettes ou tout ce que vous voulez à votre vue personnalisée:

 [buttonItemView addSubview:customImage]; [buttonItemView addSubview:customLabel]; ... 

Maintenant, mettez-le dans votre UIBarButtomItem .

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

Et enfin, ajoutez barButtonItem à votre barre de navigation.