Ändern Sie die Schriftart eines UIBarButtonItem


139

UIToolbar mit UIBarButtonItem

Ich habe eine UIBarButtonItemin meinem UIToolbarTitel Fertig . Jetzt möchte ich die Schriftart von der Standardeinstellung in "Trebuchet MS" mit Fettdruck ändern . Wie kann ich das machen?

Antworten:


126

Da UIBarButtonItem von UIBarItem erbt, können Sie es versuchen

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

Dies gilt jedoch nur für iOS5. Für iOS 3/4 müssen Sie eine benutzerdefinierte Ansicht verwenden.


214

Um genau zu sein, kann dies wie folgt durchgeführt werden

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

Oder mit Objektliteral-Syntax:

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

Hier ist der Einfachheit halber die Swift-Implementierung:

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

2
NSFontAttributeName sollte stattdessen UITextAttributeFont verwendet werden, und NSForegroundColorAttributeName sollte bei der Entwicklung für IOS7 anstelle von UITextAttributeTextColor verwendet werden.
Raz

126

Für diejenigen, die daran interessiert sind UIAppearance, ihre UIBarButtonItemSchriftarten in der gesamten App zu gestalten, kann dies mithilfe der folgenden Codezeile erreicht werden:

Ziel 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)

Oder für ein einzelnes UIBarButtonItem (nicht für alle Apps), wenn Sie eine benutzerdefinierte Schriftart für eine bestimmte Schaltfläche haben:

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

Natürlich können Sie die Schriftart und Größe nach Belieben ändern. Ich ziehe es vor, diesen Code in die AppDelegate.mDatei im didFinishLaunchingWithOptionsAbschnitt einzufügen.

Verfügbare Attribute (fügen Sie sie einfach hinzu NSDictionary):

  • NSFontAttributeName: Ändern Sie die Schriftart mit a UIFont
  • NSForegroundColorAttributeName: Ändern Sie die Farbe mit a UIColor
  • NSShadow: Schlagschatten hinzufügen (siehe NSShadowKlassenreferenz)

(Aktualisiert für iOS7 +)


3
Die UITextAttribute .. -Schlüssel sind ab iOS7 veraltet. Verwenden Sie stattdessen NSFontAttribute ... und NSForeground ... usw.
Emmanuel Ay

2
Ich habe für die in iOS7 eingeführten Verwerfungen aktualisiert. Vielen Dank für das Heads-up, @EmmanuelAy!
Rog

1
Fantastisch! Meine App sieht jetzt wunderschön aus (nun, auf meine eigene Art ist das !!: P) Danke
Septronic

20

In Swift würden Sie dies wie folgt tun:

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

1
Vergessen Sie nicht das Ausrufezeichen (!) Nach der Schriftart. Die Fehlermeldung: "'_' kann nicht in 'String' konvertiert werden" ist nicht wirklich hilfreich.
Ciryon

17

Dies sind großartige Antworten oben. Nur für iOS7 aktualisieren:

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

16

Swift3

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

schnell

   barbutton.setTitleTextAttributes([
        NSFontAttributeName : UIFont.systemFontOfSize(18.0),
        NSForegroundColorAttributeName : UIColor.redColor(),NSBackgroundColorAttributeName:UIColor.blackColor()],
        forState: UIControlState.Normal)

Ziel c

     [ barbutton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
        [UIFont fontWithName:@"Helvetica-Bold" size:20.0], NSFontAttributeName,
        [UIColor redColor], NSForegroundColorAttributeName,[UIColor blackColor],NSBackgroundColorAttributeName,
        nil]
        forState:UIControlStateNormal];

8

Um dies für einige, UIBarButtonItemsaber nicht alle zu tun, empfehle ich den folgenden Ansatz.

  1. Ein ... kreieren UIBarButtonItem Unterklasse. Fügen Sie nichts hinzu - Sie werden es nur als benutzerdefinierte Klasse im Storyboard und als Proxy für das Erscheinungsbild verwenden ...
  2. Ändern Sie in Ihrem Storyboard die benutzerdefinierte Klasse für alle gewünschten UIBarButtonItemsin Ihre Unterklasse
  3. Importieren Sie in Ihrem AppDelegate Ihre UIBarButtonItemUnterklasse und fügen Sie die folgende Zeile hinzuapplication:didFinishLaunchingWithOptions:

In meinem Fall habe ich nur UIBarButtonItemzu dem Zweck, den Text fett zu schreiben, eine Unterklasse erstellt:

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

8

In Swift 4 können Sie die Schriftart und Farbe ändern, UIBarButtonItemindem Sie den folgenden Code hinzufügen.

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

3

Dies ist der richtige Weg: Deklarieren Sie Ihr barButtonItem (in diesem Fall rightBarButtonItem) und fügen Sie es setTitleTextAttributes hinzu.

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

nachdem Sie Titelattribute hinzufügen können

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

Sie können die Größe, das Gewicht (fett, schwer, normal usw.) und die Farbe ändern, wie Sie es bevorzugen ... Hoffe, diese Hilfe :)


3

Swift 5-Implementierung

rightButtonItem.setTitleTextAttributes([
            NSAttributedString.Key.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
            NSAttributedString.Key.foregroundColor: UIColor.green],
        for: .normal)

2

schnell 3

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

1

In der gesamten App:

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

    }

0

UIBarButtonKeine Eigenschaft zum Ändern der Schriftart. Sie können jedoch eine Schaltfläche mit benutzerdefinierter Schriftart erstellen und diese dann in UIBarButton hinzufügen. Es kann Ihr Problem gelöst sein


0

Angenommen, Sie möchten iOS4 und früher unterstützen, ist es am besten, eine Balkenschaltfläche mit dieser initWithCustomView:Methode zu erstellen und eine eigene Ansicht bereitzustellen, die so etwas wie ein UIButton sein kann, mit dem Sie die Schriftart einfach anpassen können.

Sie können einen UIButton auch in Interface Builder auf eine Symbolleiste oder Navigationsleiste ziehen, wenn Sie die Schaltfläche nicht programmgesteuert, sondern per Drag & Drop erstellen möchten.

Leider bedeutet dies, dass Sie das Hintergrundbild der Schaltfläche selbst erstellen. Es gibt keine Möglichkeit, die Schriftart eines Standard-UIBarButtonItem vor iOS5 anzupassen.


0

Sie können UIViewprogrammgesteuert eine benutzerdefinierte erstellen :

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

Fügen Sie dann Ihrer benutzerdefinierten Ansicht Bilder, Beschriftungen oder was auch immer Sie möchten hinzu:

[buttonItemView addSubview:customImage];

[buttonItemView addSubview:customLabel];

...

Jetzt steck es in deine UIBarButtomItem.

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

Und schließlich fügen Sie barButtonItem zu Ihrer Navigationsleiste hinzu.


0

Zum Abschluss möchte ich diese Methode hinzufügen, die 2019 noch in Objective-C verwendet wird. :)

_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];
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.