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?
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.
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)
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 +)
Dans Swift, vous procéderiez comme suit:
backButtonItem.setTitleTextAttributes([
NSFontAttributeName : UIFont(name: "Helvetica-Bold", size: 26)!,
NSForegroundColorAttributeName : UIColor.blackColor()],
forState: UIControlState.Normal)
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];
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];
Pour faire cela pour certains UIBarButtonItems
mais pas tous, je recommande l'approche suivante.
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 ...UIBarButtonItems
souhaités en 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];
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)
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 :)
Swift 3
barButtonName.setTitleTextAttributes( [NSFontAttributeName : UIFont.systemFont(ofSize: 18.0),NSForegroundColorAttributeName : UIColor.white], for: .normal)
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)
}
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.
UIBarButton
n'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
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.
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];