Невозможно изменить текст и цвет текста кнопки Назад навигационного элемента - PullRequest
4 голосов
/ 24 июля 2011

Я пытаюсь установить цвет текста кнопки (красный) для моей панели навигации, используя код ниже. (ПРИМЕЧАНИЕ: приведенный ниже код уже находится в «предыдущем» контроллере представления, в данном случае в «популярном» контроллере представления:

//Customize Back button
UIView *backButtonView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 30, 40)];
UILabel *backButtonLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 30, 40)];
backButtonLabel.text = @"back";
backButtonLabel.textColor = [UIColor colorWithHexString:@"cf212a"];
[backButtonView addSubview:backButtonLabel];

UIBarButtonItem *backButton = [[UIBarButtonItem alloc]initWithCustomView:backButtonView];
self.navigationItem.backBarButtonItem = backButton;

Однако я не получаю желаемого эффекта. Я все еще получаю текст по умолчанию белого цвета в кнопке. Текст также не изменен на «назад»

enter image description here

Как мне решить эту проблему?

Ответы [ 7 ]

4 голосов
/ 24 июля 2011

Это связано с тем, что элемент backbuttonitem является элементом uibarbuttonite, который будет отображаться на следующем контроллере представления, который будет помещаться поверх текущего контроллера представления, а не текущего контроллера представления.

Если вы хотите установить кнопку текущего представления так, как вы пытаетесь сделать в приведенном выше коде, чем просто переместить код в контроллер представления, показанный перед ним (под ним в стеке), чтобы при нажмите контроллер вида, для которого вы хотите показать пользовательскую кнопку назад, которая была установлена ​​в предыдущем контроллере вида. Это потому, что кнопка «Назад» принадлежит предыдущему контроллеру представления, который будет выдвигать ваш новый контроллер представления ...

1 голос
/ 14 апреля 2013

Лучший способ установить его глобально или локально -

    [[UIBarItem appearance] setTitleTextAttributes:
         [NSDictionary dictionaryWithObjectsAndKeys:
         [UIColor colorWithRed:220.0/255.0 green:104.0/255.0 blue:1.0/255.0 alpha:1.0], UITextAttributeTextColor, 
         [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0], UITextAttributeTextShadowColor, 
         [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset, 
         [UIFont fontWithName:@"AmericanTypewriter" size:0.0], UITextAttributeFont, 
      nil] 
        forState:UIControlStateNormal];
1 голос
/ 20 августа 2012

Это сработало для меня.

С его помощью вы можете изменить цвет всех кнопок навигации:

[[UIBarButtonItem appearance] setTintColor:[UIColor redColor]];

Замените redColor на следующие, чтобы настроить цвет кнопок:

colorWithRed:0/255.0 green:144/255.0 blue:200/255.0 alpha:1.0// pick your color using this

Не забудьте поместить это в контроллер представления, который выдвигает. Не тот контроллер вида, где вы хотите видеть этот цвет кнопки назад. Как объяснил Робин.

1 голос
/ 22 декабря 2011

Я просто собрал простой подкласс UIViewController, который добавляет настраиваемую кнопку "Назад", которая позволяет изменять цвета текста.По сути, он добавляет некоторую логику willAppear / willDisappear для анимации кнопки «Назад», как это делает UINavigationController при использовании свойства leftBarButtonItem.

https://github.com/typeoneerror/BBCustomBackButtonViewController

1 голос
/ 25 июля 2011

Я считаю, что только свойство title имеет значение в элементе кнопки "Назад";он позволяет вам иметь длинный заголовок в середине и более короткий заголовок в кнопке «назад».

Самый простой способ добавить пользовательскую «кнопку назад» - установить UINavigationItem.leftBarButtonItem;вам нужно будет правильно установить его цель / действие.

0 голосов
/ 21 июня 2013
self.navigationItem.backBarButtonItem.tintColor = [UIColor blackColor];
0 голосов
/ 18 сентября 2012

Проблема в том, что у вас нет хорошего способа установить шрифт и цвета кнопки назад на глобальном уровне. Это в текущей iOS 5. Для этого я использую typeoneerror's https://github.com/typeoneerror/BBCustomBackButtonViewController, упомянутый здесь.

Однако есть хороший способ установить свойства текста и оттенка кнопок панели навигации на глобальном уровне, не нарушая внешний вид других кнопок и меню. Я использую код как:

[[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleColor:[UIColor colorWithRed:102.0f/255.0f green:102.0f/255.0f blue:102.0f/255.0f alpha:1.0f] forState:UIControlStateNormal];
[[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleShadowColor:[UIColor colorWithWhite:1.0 alpha:0.75] forState:UIControlStateNormal];
[[[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] titleLabel] setShadowOffset:CGSizeMake(1.0, 1.0)];

В одном из моих проектов. Я звоню с - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

...