Ä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?

Ankit Vyas
quelle

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.

Teriiehina
quelle
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)
Maske
quelle
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 +)

Rog
quelle
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)
Antoine
quelle
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];
TheGeezer
quelle
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];
Anbu.Karthik
quelle
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];
Kyle Clegg
quelle
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)
Vinoth Vino
quelle
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 :)

Fabio
quelle
3

Swift 5-Implementierung

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

schnell 3

barButtonName.setTitleTextAttributes( [NSFontAttributeName : UIFont.systemFont(ofSize: 18.0),NSForegroundColorAttributeName : UIColor.white], for: .normal) 
venky
quelle
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)

    }
Yogesh Lolusare
quelle
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

Hiren
quelle
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.

Nick Lockwood
quelle
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.

Giuseppe Garassino
quelle
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];
Peter Suwara
quelle