Используйте 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];