ответ

8

Лучше всего установить tintColor ПОСЛЕ того, как вы добавляете к нему кнопки, как и в iOS 4.0, он больше не обновляет кнопки, добавленные в панели после того, как был установлен tintColor.

2

см "Изменение цвета UINavigationBarButtons"

EDIT: Я удалить ссылку, так как домен вниз ...

это текст из кеша google:


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

На приведенном выше изображении показано только несколько цветов. По правде говоря, вы можете сделать кнопку любого цвета, который вы хотите. Фантастика! Код действительно прост в этом. Первое, что мы хотим сделать, - открыть файл заголовка для любого объекта, который будет поворачивать кнопку навигационной панели другого цвета и объявлять передний класс UINavigationButton. Вы можете получить этот класс, либо выполнив итерацию через subviews UINavigationBar, прочитав его имена классов subviews, или с помощью класса 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 для итерации через subviews UINavigationBar с использованием NSFastEnumeration. Затем мы выводим имя класса subview для дальнейшего использования. Если имя класса UINavigationButton, то у нас есть наше представление. Все, что мы делаем, - это свойство tintColor, если UINavigationButton.

Всё, все готово!

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

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

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

+0

спасибо друг !!!!! –

15

Я нашел это решение предпочтительнее те, которые перечислены здесь: Tint UIButton and UIBarButtonItem. В отличие от принятого ответа, он позволяет изменять цвет UIBarButtonItems независимо от UINavigationBar.

В случае, если в будущем ссылка не работает, суть заключается в том, что вы создаете тонизированный UISegmentedControl (с UISegmentedControlStyleBar) с одним сегментом, а затем создаете UIBarButtonItem, используя это как свое собственное представление.

В iOS 5 UIBarButtonItem имеет свойство tintColor.

+2

Удивительный! Я не понимаю, почему это не выбрано в качестве ответа, поскольку этот метод позволяет изменять фон элемента UIBarButton динамически, а не только при создании. Спасибо, что поделились этим! – Stunner

+0

Это потрясающе! +1 –

+0

Я сделал это, и теперь кнопка больше не реагирует на действия ... Любая идея, что можно сделать? –

1

UIBarButtonItems по существу отвечает на setTintColor, хотя это не общедоступный API.

У меня есть пользовательский UINavigationBar подкласс, который работает этот блок:

for (UIView *subview in self.subviews) { 
    if ([subview respondsToSelector:@selector(setTintColor:)]) { 
     [subview performSelector:@selector(setTintColor:) withObject:[UIColor redColor]]; 
    } 
} 

Очевидно заменить [UIColor redColor] с цветом вашего выбора.

0

Доступный в прошивкой 5.0 и более поздней версии для UIBarButtonItem:

- (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics 

Казалось бы, единственным решением тока (IOS 9.0). tintColor теперь используется для цвета изображения.

0

Swift3

UIBarButtonItem.appearance().tintColor = UIColor.green 
Смежные вопросы