UIBarButtonItem выделенный цвет - PullRequest
       30

UIBarButtonItem выделенный цвет

6 голосов
/ 25 октября 2010

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

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

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

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Если вы используете Interface Builder, перетащите UIB-кнопку на правую часть панели навигации, и он появится как элемент кнопки правой панели навигации.Затем настройте разные оттенки для разных состояний кнопки, и все готово.Работает в Xcode 10 и Swift 4.

0 голосов
/ 04 марта 2011

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

Чтобы сделать то, что вы просите, я бы создал пользовательскую кнопку UIB с фоновыми изображениями для различных состояний элемента управления, которые соответствуют вашей цветовой схеме, а затем использовал эту кнопку UIBarton в качестве представления для пользовательского элемента 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];

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

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

Должен заметить, что я когда-либо использовал swizzling только для тестирования / отладки.

...