2010-10-25 3 views
6

я установить пользовательский цвет оттенок для UINavigationBar (в пределах UINavigationController), который, в свою очередь, устанавливает соответствующий цвет для соответствия UIBarButtonItems, которые вставляются в UINavigationBar. Однако, когда я выбираю UIBarButtonItem, кнопка превращается в (по-видимому) выделенное состояние и представляет другой цвет, который выглядит совсем немного и не очень хорошо соответствует цвету оттенка. Есть ли способ изменить этот выделенный цвет состояния на собственный цвет?UIBarButtonItem Выделено Цвет

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

Любая помощь была бы принята с благодарностью.

ответ

0

Из того, что я помню из столкнулся с аналогичной проблемой, UINavigationBar будет просто взять tintColor и сделать его темнее для UIBarButtonItem (если стиль не установлен в BarStyleBlack, в этом случае он делает его скучным серым цветом).

Чтобы сделать то, что вы просите, я бы создал пользовательский UIButton с фоновыми изображениями для разных состояний управления, которые соответствуют вашей цветовой схеме, а затем используйте этот UIButton как представление для пользовательского UIBarButtonItem.

UIButton *customButton = [UIButton buttonWithType:...]; 

//normal_button.png and selected_button.png need to be created by you 
[customButton setBackgroundImage: [UIImage imageNamed:@"normal_button.png"] forState:UIControlStateNormal]; 
[customButton setBackgroundImage: [UIImage imageNamed:@"selected_button.png"] forState:UIControlStateSelected]; 

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView: customButton]; 

Если вы хотите, чтобы попытаться инкапсулировать это, вы всегда можете создать фабрику или метод пользовательской инициализации на UIBarButtonItem (через категорию) и использовать приведенный выше код (с небольшими изменениями).

Я знаю, что я не полностью обращаюсь к вашему второму пункту, просто переопределяя состояние управления категорией. Я не знаю, какой метод переопределить в UIBarButtonItem, чтобы выполнить такую ​​вещь, но вы можете выполнить то, что хотите, с помощью метода swizzling (http://cocoadev.com/index.pl?MethodSwizzling), как только вы узнаете, какой метод, который вы хотите обменять.

Следует отметить, что я только что использовал swizzling для тестирования/отладки.

+0

Как вы можете установить выбранное состояние? UIBarButton.selected не существует? Как вы могли бы получить доступ к UIButton внутри UIBarButton? –

+0

Второе изображение должно быть настроено для UIControlState.Highlighted, not .Selected –

Смежные вопросы