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)

введите описание изображения здесь

  1. В 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

Он всегда работает для меня:

  • self.navigationItem.leftBarButtonItem = [self logicToAddBackButton];

  • ПОЛУЧИТЬ КНОПКУ НАЗАД ПО УМОЛЧАНИЮ

-

(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];