Изменить цвет UIBarButtonItem - PullRequest
       1

Изменить цвет UIBarButtonItem

0 голосов
/ 22 октября 2010

Я создал пользовательский элемент панели кнопок в коде.

UIButton* backButton = [UIButton buttonWithType:102]; // left-pointing shape!
[backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
[backButton setTitle:@"Custom Item" forState:UIControlStateNormal];

// create button item -- possible because UIButton subclasses UIView!
UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = backItem;

Но отображается темно-синий. Мне нужно получить внешний вид по умолчанию для этого. Как установить внешний вид по умолчанию?

С уважением,

Дильшан

Ответы [ 2 ]

0 голосов
/ 06 апреля 2011

см. «Изменение цветов кнопок UINavigationBarButtons»

РЕДАКТИРОВАТЬ: я удаляю ссылку, потому что домен не работает ...

Текст из кеша Google:


Хорошо, вот еще один быстрый совет. «Как изменить цвета кнопки на панели инструментов». Конечно, это можно применить к любой панели инструментов, но я собираюсь продемонстрировать процедуру на панели UINavigationBar.

Приведенное выше изображение показывает только пару цветов. По правде говоря, вы можете сделать кнопку любого цвета, который вы хотите. Фантастика! Код действительно прост для этого. Первое, что мы хотим сделать, это открыть файл заголовка для любого объекта, который будет поворачивать кнопку навигационной панели другого цвета и объявить класс пересылки UINavigationButton. Вы можете получить этот класс либо перебирая подпредставления UINavigationBar, читая имена классов его подпредставлений, либо демпфируя класс UIKit, если у вас есть взломанное устройство.

Поместите следующую строку перед объявлением интерфейса:

@class UINavigationButton;

Теперь объявите новый метод в заголовке, который мы будем использовать для фактического изменения цвета кнопки.

- (void)changeNavigationButtonColorToColor:(UIColor *)newColor

Или что-то похожее на приведенную выше строку кода.

Теперь откройте файл реализации вашего объекта и реализуйте описанный выше метод. В любом месте вашего файла добавьте следующий метод:

- (void)changeNavigationButtonColorToColor:(UIColor *)newColor {
     for (UIView *view in self.navigationController.navigationBar.subviews) {
             NSLog(@"%@", [[view class] description]);
             if ([[[view class] description] isEqualToString:@"UINavigationButton"]) {
                     [(UINavigationButton *)view setTintColor:newColor];
             }
     }
   }

Как вы можете видеть выше, это на самом деле намного проще, чем кажется на первый взгляд. Сначала мы создадим цикл for для итерации по подпредставлениям UINavigationBar, используя NSFastEnumeration. Затем мы выводим имя класса подпредставления для дальнейшего использования. Если имя класса UINavigationButton, то мы получили наше представление. Все, что мы делаем, это устанавливаем свойство tintColor, если UINavigationButton.

Вот и все, мы закончили!

В качестве альтернативы, если вам нужна более широкая область, я бы предложил создать новую категорию UINavigationBar и разместить там метод изменения цвета кнопки. Это ваш метод может быть выполнен любым классом, который использует UINavigationBar без необходимости повторного создания одного и того же метода снова и снова.

Помните, что кнопка "Назад" и кнопка навигации - это не одно и то же. Вам придется красить кнопку назад отдельно.

И, как обычно, вот ссылка на пример приложения, демонстрирующий этот код: NavButtonColor.zip


@ Роб: да, это работает и для панели инструментов!

- (void)changeToolbarButtonColorToColor:(UIColor *)newColor {
    for (UIView *view in self.navigationController.toolbar.subviews) {                 
        if ([[[view class] description] isEqualToString:@"UIToolbarButton"]) {                        
            [(UINavigationButton *)view setTintColor:newColor];            
        }   
    }    
}

Будьте осторожны: вы должны использовать «панель инструментов» во 2-й строке и «UIToolbarButton» в 3-й строке.
Добавьте этот код в ваш viewDidLoad:

- (void)viewDidLoad {   
    [self changeToolbarButtonColorToColor: [UIColor colorWithRed:0.0/255 green:163.0/255 blue:224.0/255 alpha:1]];
}

Вот и все! :)

0 голосов
/ 22 октября 2010

Вероятно, неправильный вопрос, но если вас беспокоит внешний вид, почему вы используете неопределенный UIButtonType, чтобы изобразить левую кнопку? Левая кнопка предназначена для возврата обратно в стек навигации, и я думаю, что она довольно бесплатна, если вы используете UINavigationController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...