Zmień czcionkę UIBarButtonItem

139

UIToolbar z UIBarButtonItem

Mam UIBarButtonItemw UIToolbartytule Gotowe . Teraz chcę zmienić czcionkę z domyślnej na „Trebuchet MS” za pomocą pogrubienia. Jak mogę to zrobić?

Ankit Vyas
źródło

Odpowiedzi:

126

Ponieważ UIBarButtonItem dziedziczy po UIBarItem, możesz spróbować

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

ale to jest tylko dla iOS5. W przypadku iOS 3/4 będziesz musiał użyć widoku niestandardowego.

teriiehina
źródło
214

Aby być precyzyjnym, można to zrobić jak poniżej

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

Lub za pomocą składni literału obiektowego:

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

Dla wygody oto implementacja Swift:

buttonItem.setTitleTextAttributes([
        NSAttributedStringKey.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
        NSAttributedStringKey.foregroundColor: UIColor.green],
    for: .normal)
maska
źródło
2
NSFontAttributeName powinno być używane zamiast UITextAttributeFont, a NSForegroundColorAttributeName powinny być zamiast UITextAttributeTextColor podczas tworzenia dla IOS7.
Raz,
126

Dla zainteresowanych używaniem UIAppearancedo stylizacji ichUIBarButtonItem czcionek w całej aplikacji mogą skorzystać z następującego wiersza kodu:

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

Szybki 3

UIBarButtonItem.appearance().setTitleTextAttributes(
[
    NSFontAttributeName : UIFont(name: "HelveticaNeue-Light", size: 12)!,
    NSForegroundColorAttributeName : UIColor.white,
], for: .normal)

Szybki 4

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

Lub dla pojedynczego UIBarButtonItem (nie dla całej aplikacji), jeśli masz niestandardową czcionkę w szczególności dla jednego przycisku:

Szybki 3

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

Szybki 4

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

Oczywiście możesz zmienić czcionkę i rozmiar na dowolne. Wolę umieścić ten kod w AppDelegate.mpliku w didFinishLaunchingWithOptionssekcji.

Dostępne atrybuty (wystarczy dodać je do NSDictionary):

  • NSFontAttributeName: Zmień czcionkę za pomocą UIFont
  • NSForegroundColorAttributeName: Zmień kolor za pomocą UIColor
  • NSShadow: Dodaj cień (zobacz informacje o NSShadowklasie)

(Zaktualizowano dla iOS7 +)

rog
źródło
3
Klucze UITextAttribute .. są przestarzałe od systemu iOS7. Zamiast tego użyj NSFontAttribute ... i NSForeground ... itd.
Emmanuel Ay
2
Zaktualizowałem dla wycofań wprowadzonych w iOS7. Dzięki za ostrzeżenia, @EmmanuelAy!
rog
1
Fantastyczny! Moja aplikacja wygląda teraz pięknie (no cóż, na swój sposób !!: P) Dziękuję
Septronic
20

W Swift zrobiłbyś to w następujący sposób:

backButtonItem.setTitleTextAttributes([
        NSFontAttributeName : UIFont(name: "Helvetica-Bold", size: 26)!,
        NSForegroundColorAttributeName : UIColor.blackColor()],
    forState: UIControlState.Normal)
Antoine
źródło
1
Nie zapomnij wykrzyknika (!) Po czcionce. Komunikat o błędzie: „Nie można zamienić„ _ ”na„ Ciąg ”” nie jest zbyt pomocny.
Ciryon,
17

To są świetne odpowiedzi powyżej. Aktualizuję tylko dla iOS7:

NSDictionary *barButtonAppearanceDict = @{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Thin" size:18.0] , NSForegroundColorAttributeName: [UIColor whiteColor]};
    [[UIBarButtonItem appearance] setTitleTextAttributes:barButtonAppearanceDict forState:UIControlStateNormal];
TheGeezer
źródło
16

Swift3

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

szybki

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

Cel C

     [ barbutton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
        [UIFont fontWithName:@"Helvetica-Bold" size:20.0], NSFontAttributeName,
        [UIColor redColor], NSForegroundColorAttributeName,[UIColor blackColor],NSBackgroundColorAttributeName,
        nil]
        forState:UIControlStateNormal];
Anbu.Karthik
źródło
8

Aby to zrobić dla niektórych, UIBarButtonItemsale nie dla wszystkich, zalecam następujące podejście.

  1. Stwórz UIBarButtonItem podklasę. Nie dodawaj niczego do tego - będziesz go używać tylko jako niestandardowej klasy w scenorysie i do jego wyglądu proxy ...
  2. W swoim storyboardzie zmień klasę niestandardową dla wszystkich pożądanych UIBarButtonItemsw podklasie
  3. W AppDelegate zaimportuj UIBarButtonItempodklasę i dodaj następujący wiersz doapplication:didFinishLaunchingWithOptions:

W moim przypadku utworzyłem podklasę UIBarButtonItemwyłącznie w celu pogrubienia tekstu:

[[BoldBarButtonItem appearance] setTitleTextAttributes:
  [NSDictionary dictionaryWithObjectsAndKeys: 
    [UIFont boldSystemFontOfSize:18.0], NSFontAttributeName,nil] 
                                              forState:UIControlStateNormal];
Kyle Clegg
źródło
8

W Swift 4 możesz zmienić czcionkę i kolor UIBarButtonItem, dodając następujący kod.

addTodoBarButton.setTitleTextAttributes(
        [
        NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Bold", size: 17)!,
        NSAttributedStringKey.foregroundColor: UIColor.black
        ], for: .normal)
Vinoth Vino
źródło
4

To jest właściwy sposób: zadeklaruj swój barButtonItem (w tym przypadku rightBarButtonItem) i dodaj go setTitleTextAttributes.

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

po dodaniu atrybutów tytułu

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

możesz zmienić rozmiar, wagę (pogrubiony, ciężki, regularny itp.) i kolor, jak wolisz ... Mam nadzieję, że to pomoże :)

Fabio
źródło
3

Wdrożenie Swift 5

rightButtonItem.setTitleTextAttributes([
            NSAttributedString.Key.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
            NSAttributedString.Key.foregroundColor: UIColor.green],
        for: .normal)
pankaj nigam
źródło
2

szybki 3

barButtonName.setTitleTextAttributes( [NSFontAttributeName : UIFont.systemFont(ofSize: 18.0),NSForegroundColorAttributeName : UIColor.white], for: .normal) 
Venky
źródło
1

W całej aplikacji:

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

    }
Yogesh Lolusare
źródło
0

UIBarButtonbrak właściwości związanych ze zmianą czcionki. Ale możesz utworzyć przycisk z niestandardową czcionką, a następnie dodać go do UIBarButton. To może rozwiązać twój problem

Hiren
źródło
0

Zakładając, że chcesz obsługiwać system iOS4 i wcześniejsze, najlepszym rozwiązaniem jest utworzenie przycisku paska za pomocą tej initWithCustomView:metody i dostarczenie własnego widoku, który może być czymś w rodzaju przycisku UIButton, w którym można łatwo dostosować czcionkę.

Możesz także przeciągnąć przycisk UIButton na pasek narzędzi lub pasek nawigacji w programie Interface Builder, jeśli chcesz utworzyć przycisk za pomocą metody przeciągnij i upuść zamiast programistycznie.

Niestety oznacza to samodzielne tworzenie obrazu tła przycisku. Nie ma możliwości dostosowania czcionki standardowego UIBarButtonItem przed iOS5.

Nick Lockwood
źródło
0

Możesz utworzyć program niestandardowy UIView:

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

Następnie dodaj obrazy, etykiety lub cokolwiek chcesz do swojego widoku niestandardowego:

[buttonItemView addSubview:customImage];

[buttonItemView addSubview:customLabel];

...

Teraz umieść to w swoim UIBarButtomItem.

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

I na koniec dodaj barButtonItem do paska nawigacji.

Giuseppe Garassino
źródło
0

Na zakończenie chciałbym dodać tę metodę, nadal używaną w Objective-C w 2019 roku. :)

_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
źródło