Используйте UIAppearance для установки цвета текста кнопки назад для UIBarButtonItem?
Я настраивал свои UIBarButtonItems, используя UIAppearance, но я не знаю, как изменить стиль текста для кнопки "Назад". Как это делается?
Я знаю, как установить фоновое изображение:
[[UIBarButtonItem appearance]
setBackButtonBackgroundImage:[UIImage imageNamed:@"arrow-button-static.png"]
forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance]
setBackButtonBackgroundImage:[UIImage imageNamed:@"arrow-button-pressed.png"]
forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
Ответы
Ответ 1
Вы не можете изменять текстовые атрибуты только кнопки "Назад". (Или, по крайней мере, вы не можете делать это глобально с помощью прокси-сервера внешнего вида.) Apple, по-видимому, предполагает, что его текст совпадает с текстом других кнопок на панели навигации, причем только его форма (фоновое изображение) отличается.
Как отмечает @DhruvGoel, вы можете установить текстовые атрибуты:
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor redColor],UITextAttributeTextColor,
nil];
[[UIBarButtonItem appearance] setTitleTextAttributes:attributes
forState:UIControlStateNormal];
Или, только для кнопок на панели навигации:
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]
setTitleTextAttributes:attributes
forState:UIControlStateNormal];
Подробнее см. UIAppearance
протокол, чтобы узнать, как настроить внешний вид в определенных частях иерархии вашего представления/просмотра. Хотя, как я уже сказал, это не позволит вам глобально сделать текст кнопки "Назад" отличным от текста других кнопок на той же навигационной панели. (Вы можете сходить с ума, напрямую меняя каждый из них, когда появятся ваши контроллеры представлений, но это, вероятно, не очень хорошая идея.)
О, и жаль об этом импичменте.
Ответ 2
Чтобы изменить цвет текста кнопки кнопки "Назад", вы можете использовать это:
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor redColor],UITextAttributeTextColor,
nil];
[[UIBarButtonItem appearance] setTitleTextAttributes:attributes
forState:UIControlStateNormal];
Вы можете указать шрифт, цвет текста, цвет теневой тени и смещение тени текста для заголовка в словаре текстовых атрибутов, используя ключи, найденные в UIStringDrawing.h i.e. UITextAttributeFont, UITextAttributeTextColor, UITextAttributeTextShadowColor и UITextAttributeTextShadowOffset
Обратите внимание, что это только iOS 5.0 вперед
Ответ 3
Если вы хотите изменить глобальный цвет текста и кнопки "Назад", вот простое решение (в Swift 3):
UINavigationBar.appearance().tintColor = UIColor.blue
Ответ 4
Вы можете настроить элемент кнопки задней панели с помощью UIButton.
UIButton *backButton = [[UIButton alloc] initWithFrame:frame];
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithCustomView:backButton];
backButton.titleLabel.shadowColor = [UIColor blackColor];
backButton.titleLabel.shadowOffset = CGSizeMake(0, 1);
backButton.titleLabel.textColor = [UIColor whiteColor];
[self.navigationItem setLeftBarButtonItem:backBarButton];