UIBarButtonItem tintColor с UINavigationController - PullRequest
1 голос
/ 30 апреля 2011

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

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

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

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

Есть идеи? Спасибо!

Редактировать 1:

Мне бы хотелось, чтобы кнопка стиля с рамкой в ​​моем UINavigationBar имела красный или зеленый цвет фона.

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

Ответы [ 2 ]

1 голос
/ 30 апреля 2011

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

UIBarButtonItem с цветом?

0 голосов
/ 25 мая 2011

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

Пример:

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];
...