Змініть шрифт UIBarButtonItem


139

Панель UITool з UIBarButtonItem

У мене є UIBarButtonItemв моєму UIToolbarтитулованих Готово . Тепер я хочу змінити шрифт з типового на "Trebuchet MS" з Bold. Як я можу це зробити?

Відповіді:


126

Оскільки UIBarButtonItem успадковується від UIBarItem, ви можете спробувати

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

але це лише для iOS5. Для iOS 3/4 вам доведеться скористатися спеціальним поданням.


214

Якщо бути точним, це можна зробити як нижче

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

Або з буквеним синтаксисом об'єкта:

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

Для зручності ось реалізація Swift:

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

2
NSFontAttributeName слід використовувати замість UITextAttributeFont, а NSForegroundColorAttributeName має бути замість UITextAttributeTextColor при розробці для IOS7.
Раз

126

Для тих, хто зацікавлений у використанні UIAppearanceстилів своїх UIBarButtonItemшрифтів у всьому додатку, це можна зробити за допомогою цього рядка коду:

Мета C:

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

Швидкий 2.3:

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

Швидкий 3

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

Швидкий 4

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

Або для одного UIBarButtonItem (не для всіх програм), якщо у вас є спеціальний шрифт для однієї кнопки, зокрема:

Швидкий 3

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

Швидкий 4

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

Звичайно, ви можете змінити шрифт і розмір на все, що завгодно. Я вважаю за краще помістити цей код у AppDelegate.mфайл у didFinishLaunchingWithOptionsрозділі.

Доступні атрибути (просто додайте їх до NSDictionary):

  • NSFontAttributeName: Змінення шрифту на UIFont
  • NSForegroundColorAttributeName: Зміна кольору за допомогою UIColor
  • NSShadow: Додайте тінь для краплі (див. NSShadowПосилання на клас)

(Оновлено для iOS7 +)


3
Клавіші UITextAttribute .. застаріли станом на iOS7. Замість цього використовуйте NSFontAttribute ... і NSForeground ... тощо.
Еммануель Ай

2
Я оновив для застарілих даних, введених в iOS7. Дякую за голову вгору, @EmmanuelAy!
рог

1
Фантастичний! Моя програма зараз виглядає прекрасно (ну, по-своєму, так! !! P) Дякую
вересня

20

У Swift ви зробите це так:

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

1
Не забудьте знак оклику (!) Після шрифту. Повідомлення про помилку: "_" не конвертоване у "String" "не дуже корисне.
Ciryon

17

Ці чудові відповіді вище. Просто оновлення для iOS7:

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

16

Швидкий3

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

стрімкий

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

Ціль-С

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

8

Для цього для деяких, UIBarButtonItemsале не для всіх я рекомендую наступний підхід.

  1. Створіть UIBarButtonItemпідклас. Не додайте до нього нічого - ви будете використовувати його лише як користувацький клас у розгортці та для його проксі-сервера ...
  2. У своїй дошці розповідей змініть спеціальний клас для всіх бажаних UIBarButtonItemsпідкласу
  3. У вашому AppDelegate імпортуйте свій UIBarButtonItemпідклас та додайте наступний рядок доapplication:didFinishLaunchingWithOptions:

У моєму випадку я підкласирував UIBarButtonItemєдину мету, що зміщує текст:

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

8

У Swift 4 ви можете змінити шрифт і колір UIBarButtonItem, додавши наступний код.

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

4

Це правильний спосіб: оголосити свій barButtonItem (у цьому випадку rightBarButtonItem) та додати його setTitleTextAttributes.

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

після додавання атрибутів заголовка

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

ви можете змінити розмір, вагу (.bold, .heavy, .regular тощо) та колір, як вам зручніше ... Сподіваюся, що це допоможе :)


3

Швидке виконання 5

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

2

стрімкий 3

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

1

У всьому додатку:

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

    }

0

UIBarButtonне мають властивості, пов’язаної зі зміною шрифту. Але ви можете створити кнопку зі спеціальним шрифтом, а потім додати її до UIBarButton. Це може вирішити вашу проблему


0

Якщо припустити, що ви хочете підтримувати iOS4 та новіші версії, вам найкраще створити панельну кнопку за допомогою initWithCustomView:методу та надати власний вигляд, який може бути чимось на зразок UIButton, де ви можете легко налаштувати шрифт.

Ви також можете перетягнути UIButton на панель інструментів або навігаційну панель в Interface Builder, якщо ви хочете створити кнопку з перетягуванням, а не програмно.

На жаль, це означає створити фонове зображення кнопки самостійно. Немає можливості налаштувати шрифт стандартного UIBarButtonItem до iOS5.


0

Ви можете створити спеціальний UIViewпрограмно:

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

Потім додайте зображення, етикетки або все, що вам подобається, у свій власний вид:

[buttonItemView addSubview:customImage];

[buttonItemView addSubview:customLabel];

...

Тепер покладіть його у своє UIBarButtomItem.

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

І нарешті додати barButtonItem до панелі навігації.


0

Для завершення я хотів би додати цей метод, який все ще використовується в Objective-C у 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];
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.