IPhone Set Tint Color of Back Bar Button Item
Я пытаюсь установить цвет оттенка задней кнопки в навигационном контроллере, но ничего не работает. Я пробовал
[self.navigationController.backBarButtonItem setTintColor:myColor];
//myColor was previously set
Но он остается по умолчанию
Ответы
Ответ 1
Я считаю, что barButtonItem доступен только для чтения. (Я не слишком уверен в этом, кто-то меня исправит, если я ошибаюсь)
Чтобы дать цвет оттенка этим кнопкам, это то, что я сделал бы:
В своем делете приложения добавьте следующие строки кода:
UIBarButtonItem *barButtonAppearance = [UIBarButtonItem appearance];
[barButtonAppearance setTintColor:[UIColor redColor]]; // Change to your colour
Первая строка задает прокси-сервер внешнего вида, поэтому я считаю, что это тоже работает, если вам меньше кода:
[[UIBarButtonItem appearance] setTintColor:[UIColor redColor]];
Я надеюсь, что это сработает для вас! (Это изменяет все экземпляры UIBarButtonItem)
Ответ 2
Вы не можете напрямую изменить цвет оттенка UINavigationItem. Вы должны изменить цвет оттенка панели навигации, и кнопка вашего бара автоматически изменит свой цвет.
Добавьте эти строки в свой метод viewWillAppear
[[self.navigationController navigationBar] tintColor] = [UIColor myColor];
Или Вы можете создать пользовательскую кнопку и инициализировать свой UIBarButtonItem как
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:yourUIButton];
Ответ 3
Это сработало для меня.
[self.navigationController.navigationBar setTintColor:[UIColor redColor]];
Это очень похоже на второй ответ...
Ответ 4
Если вы предпочитаете делать это в Interface Builder без написания кода:
- Выберите UINavigationBar (внутри UINavigationController)
![введите описание изображения здесь]()
- В Attributes Inspector найдите "Tint" - это то, что устанавливает цвет кнопки Back Button. Обратите внимание, что "Tint" не является тем же, что и для фона панели навигации.
![введите описание изображения здесь]()
Важно установить обратную функцию Back Button таким образом, а не пытаться реализовать leftBarButtonItem, поскольку реализация leftBarButtonItem отключит встроенные жесты обратной навигации, например, проведите пальцем по экрану назад.
Ответ 5
Быстрый способ:
Он изменяет все элементы в навигаторе.
В AppDelegate сделайте что-нибудь вроде этого:
let navControl = UINavigationBar.appearance()
navControl.tintColor = UIColor.grayColor()
Ответ 6
Ну, вы можете, конечно, изменить цвет только кнопки "Назад" или, возможно, любой кнопки "Бар" на панели навигации. Вот небольшой фрагмент, чтобы сделать это.
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonItemStylePlain target:self action:nil];
backButton.tintColor = [UIColor blackColor];
[self.navigationItem setBackBarButtonItem:backButton];
[backButton release];
Ну, это всего лишь один из способов сделать это.
Надеюсь, это поможет!! Я знаю, что ответ за него уже принят, но я подумал дать ему соответствующий фрагмент.
Ура!!! Счастливое кодирование!
Ответ 7
Если вы хотите установить его в предопределенный стиль, вы можете использовать
[navigationBar setBarStyle: UIBarStyleBlack];
Ответ 8
Поместите следующий код в AppDelegate, который будет устанавливать цвет для кнопки "Назад" глобально
//Set color of BackButtonItem globally
[[UIBarButtonItem appearance] setTintColor:[UIColor colorWithRed:5.0/255.0
green:127.0/255.0 blue:173.0/255.0 alpha:1.0]];
Это поддерживается в iOS 5 и выше
Ответ 9
Он всегда работает для меня:
-
(UIBarButtonItem*) logicToAddBackButton
{
UIImageView *imageView;
// [imageView setTintColor:[UIColor redColor]];
UILabel *label=[[UILabel alloc] init];
if (WHITEBACK) {
imageView =[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"UiNavigationBackIPAD"]];
[label setTextColor:[UIColor whiteColor]];
}else{ //DEFAULTBACK
imageView =[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"UiNavigationBack"]];
[label setTextColor:[UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0]];
}
[label setText:@"Back"];
[label sizeToFit];
int space=6;
label.frame=CGRectMake(imageView.frame.origin.x+imageView.frame.size.width+space,
label.frame.origin.y, label.frame.size.width,
label.frame.size.height);
UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0, label.frame.size.width+imageView.frame.size.width+space,
imageView.frame.size.height)];
view.bounds=CGRectMake(view.bounds.origin.x+8, view.bounds.origin.y-1, view.bounds.size.width,
view.bounds.size.height);
UIButton *button=[[UIButton alloc] initWithFrame:CGRectMake(view.bounds.origin.x, view.bounds.origin.y,
view.bounds.size.width, view.bounds.size.height)];
button.bounds=CGRectMake(view.bounds.origin.x, view.bounds.origin.y, view.bounds.size.width,
view.bounds.size.height);
[button addTarget:self action:@selector(eventBack) forControlEvents:UIControlEventTouchUpInside];
[button addSubview:imageView];
[button addSubview:label];
[UIView animateWithDuration:0.33 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
label.alpha = 0.0;
CGRect orig=label.frame;
label.frame=CGRectMake(label.frame.origin.x+25, label.frame.origin.y -5, label.frame.size.width,
label.frame.size.height+10);
label.alpha = 1.0;
label.frame=orig;
} completion:nil];
UIBarButtonItem *backButton =[[UIBarButtonItem alloc] initWithCustomView:button];
return backButton;
}
-
ДЕЙСТВИЕ КНОПКИ BACK
(пустоты) eventBack { [self.navigationController popViewControllerAnimated: YES]; }
-
UiNavigationBack Image (Пожалуйста, измените цвет изображения, как требуется, с тем же размером [25X41 144 пикселя/дюйм], чтобы получить
по умолчанию)
![enter image description here]()
Ответ 10
Что для меня работало:
self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor textPrimaryColor] forKey:NSForegroundColorAttributeName];