У меня есть UIBarButtonItem
в моем UIToolbar
названии Готово . Теперь я хочу изменить шрифт по умолчанию на «Trebuchet MS» с полужирным шрифтом. Как я могу это сделать?
У меня есть UIBarButtonItem
в моем UIToolbar
названии Готово . Теперь я хочу изменить шрифт по умолчанию на «Trebuchet MS» с полужирным шрифтом. Как я могу это сделать?
Ответы:
Поскольку 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];
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)
Или для одного UIBarButtonItem (не для всего приложения), если у вас есть собственный шрифт, в частности, для одной кнопки:
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}"
Конечно, вы можете изменить шрифт и размер на все, что захотите. Я предпочитаю поместить этот код в 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];
Swift3
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)
Цель-C
[ 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];
В Swift 4 вы можете изменить шрифт и цвет UIBarButtonItem
, добавив следующий код.
addTodoBarButton.setTitleTextAttributes(
[
NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Bold", size: 17)!,
NSAttributedStringKey.foregroundColor: UIColor.black
], for: .normal)
Реализация Swift 5
rightButtonItem.setTitleTextAttributes([
NSAttributedString.Key.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
NSAttributedString.Key.foregroundColor: UIColor.green],
for: .normal)
Это правильный путь: объявите свой 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)
вы можете изменить размер, вес (жирный, тяжелый, обычный и т. д.) и цвет по своему усмотрению ... Надеюсь на эту помощь :)
Во всем приложении:
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 на панель инструментов или панель навигации в Интерфейсном Разработчике, если вы хотите создать кнопку с помощью перетаскивания, а не программно.
К сожалению, это означает создание фонового изображения кнопки самостоятельно. Невозможно настроить шрифт стандартного 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];