1

Я знаю, что в этой теме уже есть темы, но они частично решили мою проблему. мне удалось настроить цвет moreNavigationController Панель навигации и цвет этикетки смотрите здесь: picture1Настройка moreNavigationController в iOS 7

Но я получил некоторые проблемы, настраивая вид, который показывает, если вы нажмете на «редактировать» на правой стороне. Вот как это выглядит на данный момент: picture2

Чего я хочу достичь?

  • цвета проделанный в белом
  • цвета в Панели навигации в красном
  • цвета значок оттенок в красном

Я уже получил ссылку на мой UITabBarController в моем AppDelegate через

UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 

И я также назначил делегата этого tabBarController и метода делегата - (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers также вызывается. Но оттуда я не могу покрасить эти три элемента управления. Кто-то получил намек на меня?

Например это:

id modalViewCtrl = [[[tabBarController view] subviews] objectAtIndex:1]; 
if([modalViewCtrl isKindOfClass:NSClassFromString(@"UITabBarCustomizeView")] == YES) 
    ((UINavigationBar*)[[modalViewCtrl subviews] objectAtIndex:0]).barTintColor = [UIColor redColor]; 

, а также это:

- (void)tabBarController:(UITabBarController *)controller willBeginCustomizingViewControllers:(NSArray *)viewControllers { 
UIView *editView = [controller.view.subviews objectAtIndex:1]; 
UINavigationBar *modalNavBar = [editView.subviews objectAtIndex:0]; 
modalNavBar.tintColor = [UIColor redColor]; 

}

не делает просто ничего или аварии для barTintColor, потому что он "не может установить barTintColor на UILabel" , Но я не совсем уверен, как получить различные элементы управления, чтобы установить их значения цвета.

ответ

2

Я нашел ответ. Я должен был войти edit_views тогда я увидел бы, что navigationBar с индексом 1, а не 0. Тогда на индекс 2-конце есть в UITabBarButtons где я наклоняю установить правильный цвет ..

Окончательный код выглядит следующим образом это:

- (void)tabBarController:(UITabBarController *)tabBarController 
    willBeginCustomizingViewControllers:(NSArray *)viewControllers 
{ 
    UIView*   edit_views = [tabBarController.view.subviews objectAtIndex:1]; 
    UINavigationBar* bar  = [[edit_views subviews]objectAtIndex:1]; 

    bar.barTintColor = [UIColor redColor]; 
    bar.tintColor = [UIColor whiteColor]; 
    for (int i = 3; i < [edit_views.subviews count]; i++) 
    { 
     UIButton *button = [[edit_views subviews]objectAtIndex:i]; 
     button.tintColor = [UIColor redColor]; 
    } 
} 
3

Вы можете достичь этого эффекта без возни с иерархией UIView с помощью UIAppearance и установки tintColor вашего окна. Таким образом, вы можете поместить этот код в application:didFinishLaunchingWithOptions:

[self.window setTintColor:[UIColor redColor]]; 
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; 
[[UINavigationBar appearance] setBarTintColor:[UIColor redColor]]; 

Вы можете также ограничить код UIAppearance с помощью appearanceWhenContainedIn: если вы хотите другой стиль вашей навигационной панели в разных контроллерах зрения.

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