Відповіді:
Оскільки UIBarButtonItem успадковується від UIBarItem, ви можете спробувати
- (void)setTitleTextAttributes:(NSDictionary *)attributes
forState:(UIControlState)state
але це лише для iOS5. Для iOS 3/4 вам доведеться скористатися спеціальним поданням.
Якщо бути точним, це можна зробити як нижче
[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)
Для тих, хто зацікавлений у використанні 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 +)
У Swift ви зробите це так:
backButtonItem.setTitleTextAttributes([
NSFontAttributeName : UIFont(name: "Helvetica-Bold", size: 26)!,
NSForegroundColorAttributeName : UIColor.blackColor()],
forState: UIControlState.Normal)
Ці чудові відповіді вище. Просто оновлення для iOS7:
NSDictionary *barButtonAppearanceDict = @{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Thin" size:18.0] , NSForegroundColorAttributeName: [UIColor whiteColor]};
[[UIBarButtonItem appearance] setTitleTextAttributes:barButtonAppearanceDict forState:UIControlStateNormal];
Швидкий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];
Для цього для деяких, UIBarButtonItems
але не для всіх я рекомендую наступний підхід.
UIBarButtonItem
підклас. Не додайте до нього нічого - ви будете використовувати його лише як користувацький клас у розгортці та для його проксі-сервера ...UIBarButtonItems
підкласуUIBarButtonItem
підклас та додайте наступний рядок доapplication:didFinishLaunchingWithOptions:
У моєму випадку я підкласирував UIBarButtonItem
єдину мету, що зміщує текст:
[[BoldBarButtonItem appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont boldSystemFontOfSize:18.0], NSFontAttributeName,nil]
forState:UIControlStateNormal];
Це правильний спосіб: оголосити свій 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 тощо) та колір, як вам зручніше ... Сподіваюся, що це допоможе :)
Швидке виконання 5
rightButtonItem.setTitleTextAttributes([
NSAttributedString.Key.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
NSAttributedString.Key.foregroundColor: UIColor.green],
for: .normal)
У всьому додатку:
if let font = UIFont(name: "AvenirNext-DemiBold", size: 15) {
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: font,NSForegroundColorAttributeName:TOOLBAR_TITLE_COLOR], forState: UIControlState.Normal)
}
Якщо припустити, що ви хочете підтримувати iOS4 та новіші версії, вам найкраще створити панельну кнопку за допомогою initWithCustomView:
методу та надати власний вигляд, який може бути чимось на зразок UIButton, де ви можете легко налаштувати шрифт.
Ви також можете перетягнути UIButton на панель інструментів або навігаційну панель в Interface Builder, якщо ви хочете створити кнопку з перетягуванням, а не програмно.
На жаль, це означає створити фонове зображення кнопки самостійно. Немає можливості налаштувати шрифт стандартного UIBarButtonItem до iOS5.
Ви можете створити спеціальний UIView
програмно:
UIView *buttonItemView = [[UIView alloc] initWithFrame:buttonFrame];
Потім додайте зображення, етикетки або все, що вам подобається, у свій власний вид:
[buttonItemView addSubview:customImage];
[buttonItemView addSubview:customLabel];
...
Тепер покладіть його у своє UIBarButtomItem
.
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:buttonItemView];
І нарешті додати barButtonItem до панелі навігації.
Для завершення я хотів би додати цей метод, який все ще використовується в 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];