web-dev-qa-db-fra.com

Changer la police d'un UIBarButtonItem

UIToolbar with UIBarButtonItem

J'ai un UIBarButtonItem dans mon UIToolbar intitulé Fait. Maintenant, je veux changer la police par défaut en "Trebuchet MS" avec Gras. Comment puis je faire ça?

129
Ankit Vyas

UIBarButtonItem héritant de UIBarItem, vous pouvez essayer

- (void)setTitleTextAttributes:(NSDictionary *)attributes
                  forState:(UIControlState)state

mais cela ne concerne que iOS5. Pour iOS 3/4, vous devrez utiliser une vue personnalisée.

124
teriiehina

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

[buttonItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: 
    [UIFont fontWithName:@"Helvetica-Bold" size:26.0], NSFontAttributeName,
    [UIColor greenColor], NSForegroundColorAttributeName,
    nil] 
                          forState:UIControlStateNormal];

Ou avec une syntaxe littérale d'objet:

[buttonItem setTitleTextAttributes:@{
     NSFontAttributeName: [UIFont fontWithName:@"Helvetica-Bold" size:26.0],
     NSForegroundColorAttributeName: [UIColor greenColor]
} forState:UIControlStateNormal];

Pour plus de commodité, voici l’implémentation de Swift:

buttonItem.setTitleTextAttributes([
        NSAttributedStringKey.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
        NSAttributedStringKey.foregroundColor: UIColor.green],
    for: .normal)
206
mask

Pour ceux qui souhaitent utiliser UIAppearance pour styler leurs polices UIBarButtonItem dans l'application, vous pouvez utiliser cette ligne de code:

Objectif 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

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)

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.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}"

Bien sûr, vous pouvez modifier la taille et la taille de la police comme bon vous semble. Je préfère mettre ce code dans le AppDelegate.m fichier dans la section didFinishLaunchingWithOptions.

Attributs disponibles (ajoutez-les simplement au NSDictionary):

  • NSFontAttributeName: Change la police avec un UIFont
  • NSForegroundColorAttributeName: Change la couleur avec un UIColor
  • NSShadow: Ajouter une ombre portée (voir NSShadow référence de classe)

(Mise à jour pour iOS7 +)

121
rog

Dans Swift, vous procéderiez comme suit:

backButtonItem.setTitleTextAttributes([
        NSFontAttributeName : UIFont(name: "Helvetica-Bold", size: 26)!,
        NSForegroundColorAttributeName : UIColor.blackColor()],
    forState: UIControlState.Normal)
19
Antoine

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

NSDictionary *barButtonAppearanceDict = @{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Thin" size:18.0] , NSForegroundColorAttributeName: [UIColor whiteColor]};
    [[UIBarButtonItem appearance] setTitleTextAttributes:barButtonAppearanceDict forState:UIControlStateNormal];
16
David DelMonte

Swift

  buttonName.setAttributedTitle([
        NSFontAttributeName : UIFont.systemFontOfSize(18.0),
        NSForegroundColorAttributeName : UIColor.red,NSBackgroundColorAttributeName:UIColor.black],
                                     forState: UIControlState.Normal)

rapide

   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];
15
Anbu.Karthik

Pour faire cela pour certains UIBarButtonItems mais pas tous, je recommande l'approche suivante.

  1. Créez une sous-classe UIBarButtonItem. N'ajoutez rien à cela - vous ne l'utiliserez qu'en tant que classe personnalisée dans le storyboard et pour son proxy d'apparence ...
  2. Dans votre storyboard, changez la classe personnalisée pour tous les UIBarButtonItems souhaités en votre sous-classe.
  3. Dans votre AppDelegate, importez votre sous-classe UIBarButtonItem et ajoutez la ligne suivante à application:didFinishLaunchingWithOptions:

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

[[BoldBarButtonItem appearance] setTitleTextAttributes:
  [NSDictionary dictionaryWithObjectsAndKeys: 
    [UIFont boldSystemFontOfSize:18.0], NSFontAttributeName,nil] 
                                              forState:UIControlStateNormal];
7
Kyle Clegg

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

addTodoBarButton.setTitleTextAttributes(
        [
        NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Bold", size: 17)!,
        NSAttributedStringKey.foregroundColor: UIColor.black
        ], for: .normal)
7
Vinoth Vino

C’est la bonne manière: déclarez votre barButtonItem (dans ce cas, rightBarButtonItem) et ajoutez-le setTitleTextAttributes.

navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Go!", style: .plain, target: self, action: #selector(yourFuncDestination))

après avoir ajouté des attributs de titre

navigationItem.rightBarButtonItem?.setTitleTextAttributes([.font : UIFont.systemFont(ofSize: 18, weight: .bold), .foregroundColor : UIColor.white], for: .normal)

vous pouvez changer la taille, le poids (.bold, .heavy,. regular, etc.) et la couleur que vous préférez ... J'espère que cela vous aidera :)

2
Fabio

Swift 3

barButtonName.setTitleTextAttributes( [NSFontAttributeName : UIFont.systemFont(ofSize: 18.0),NSForegroundColorAttributeName : UIColor.white], for: .normal) 
2
venky

Tout au long de l'application:

if let font = UIFont(name: "AvenirNext-DemiBold", size: 15) {
        UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: font,NSForegroundColorAttributeName:TOOLBAR_TITLE_COLOR], forState: UIControlState.Normal)

    }
1
Yogesh Lolusare

Vous pouvez créer un programme personnalisé UIView par programme:

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

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

[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.

0
Beppe

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

0
Hiren

En supposant que vous souhaitiez prendre en charge iOS4 et les versions antérieures, votre meilleur choix est de créer un bouton de barre à l'aide de la touche initWithCustomView: méthode et fournissez votre propre vue qui pourrait être quelque chose comme un UIButton où vous pouvez facilement personnaliser la police.

Vous pouvez également faire glisser un bouton UIB 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 programme.

Malheureusement, cela signifie que vous créez vous-même l'image de fond du bouton. Il n'y a aucun moyen de personnaliser la police d'un UIBarButtonItem standard avant iOS5.

0
Nick Lockwood

Pour terminer, j'aimerais ajouter cette méthode, encore utilisée dans 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];
0
Peter Suwara