UIBarButtonItem tintColor с UINavigationController

У меня есть контроллер навигации с двумя элементами UIBarButtonItem на панели навигации. Я хочу изменить цвет оттенка только для того, что справа. Я нашел способ сделать это в статике:

[[self.navigationController.navigationBar.subviews objectAtIndex:2] setTintColor:[UIColor redColor]];

Проблема в том, что когда я вставляю контроллер в свой контроллер навигации, чтобы отобразить другое представление, когда я возвращаюсь к корневому представлению, где моя правая кнопка панели навигации должна иметь настраиваемый цвет, цвет кнопки возвращается к своему значению по умолчанию. И когда я снова нажимаю на нее, приложение вылетает. Он говорит, что не может изменить цвет оттенка, как если бы изменился индекс этого элемента на моей панели навигации.

Я пробовал другие техники, найденные в Интернете, но все они потерпели неудачу, когда я использую контроллер навигации и возвращаюсь к корневому контроллеру ...

Любая идея? Спасибо!

Изменить 1:

Мне нужна кнопка стиля с рамкой в ​​моем UINavigationBar с красным или зеленым цветом фона.

Что касается других способов, которые я нашел, это в значительной степени цикл foreach для представлений на панели навигации, и если вид класса представления является элементом кнопки, измените tintColor. Он не дает сбоев, но он применяется ко всем UIBarButtonItem моей панели навигации (и мне просто нужна конкретная кнопка, правильная, а не все). Например, это руководство наполовину работает, мое приложение вылетает при возвращении к контроллеру корневого представления.


person Dachmt    schedule 29.04.2011    source источник
comment
В большинстве случаев мы не можем придумать хорошее решение, поэтому я не могу сказать, что мы решили мой вопрос. Наверное, поэтому моя оценка низкая, и из-за вопросов, на которые нет ответов. В противном случае я верю кому-то, что он решил или даже частично помог мне решить мою проблему ...   -  person Dachmt    schedule 30.04.2011
comment
@Erik B Тогда ты облегчишь мне задачу, ты совсем не помог мне в моем вопросе. Так что я не стану вам за это доверять. Но я буду иметь в виду то, что вы сказали для моих старых и следующих постов, лучше узнать что-то, а не ничего, правильно? Всего хорошего.   -  person Dachmt    schedule 03.05.2011


Ответы (2)


Копаясь в подпредставлениях navigationcontroller.navigation bar с Apple не работает, ...
правильный способ изменить цвет UIBarButtonItem - использовать customView с элементом button. вот ссылка, которая объясняет ...

UIBarButtonItem с цветом?

person Jason Cragun    schedule 29.04.2011
comment
Я пробовал решение, у меня может быть кнопка, но не с рамкой, как я хочу. И я бы хотел избежать создания изображения, чтобы поставить его в качестве фона. Если это единственное решение получить стиль с рамкой с кнопкой настраиваемых цветов на моей панели навигации, я думаю, у меня не будет слишком много вариантов ... - person Dachmt; 30.04.2011
comment
Используйте изображение в кнопке, или вы также можете испачкать руки с помощью Quartz. Дайте мне знать, если вам нужен код. - person Jason Cragun; 30.04.2011

Вы просто создаете сегментированный элемент управления с одним сегментом. Установите цвет его оттенка по своему усмотрению. Вы также можете установить его режим на мгновенный, чтобы он оптически вел себя как кнопка. Добавьте сегментированный элемент управления к элементу кнопки панели с помощью инициализатора initWithCustomView :. Вот как вы обычно создаете пользовательские тонированные кнопки.

Пример:

UISegmentedControl *cartControl = [[UISegmentedControl alloc] initWithFrame:CGRectMake(10,7,60,30)];
[cartControl setTintColor:[UIColor colorWithRed:0.35 green:0.47 blue:0.65 alpha:1]];
[cartControl addTarget:self action:@selector(cart:) forControlEvents:UIControlEventValueChanged];
[cartControl setSegmentedControlStyle:UISegmentedControlStyleBar]; 
[cartControl insertSegmentWithImage:[UIImage imageNamed:@"shopping_cart_white_small.png"] atIndex:0 animated:NO]; 
[cartControl setMomentary:YES];  

UIBarButtonItem *cartButton = [[UIBarButtonItem alloc] initWithCustomView:cartControl];
[cartControl release];
[[self navigationItem] setRightBarButtonItem:cartButton];
[cartButton release];
person Stefan    schedule 25.05.2011