2011-12-01 104 views
0

这是我的问题。 我有一个应用程序使用UITabBar,并在一些视图上的一些NavigationControllers,和酒吧都是黑色不透明。由于我有超过6个选项卡,它打开UIMoreListController,到目前为止,我可以更改导航栏的颜色。 我的问题是当用户点击编辑按钮来组织moreListController上的工具栏。标题栏(我不知道它是一个工具栏还是导航栏)是蓝色的。我想将其改为黑色不透明。任何人都知道如何去做? 此致敬礼! Marcelo Marsson。UIMoreListController编辑modalViewController工具栏(或导航栏)颜色变化

回答

0

我做这在以前的项目(但是,我必须强调应用程序从未发布)通过实施UITabBarControllerDelegate协议,该方法具体为:

- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers 
{ 
    UIView *editView = [[[self.tabBarController view] subviews] objectAtIndex:1]; 
    UINavigationBar *modalNavBar = [[editView subviews] objectAtIndex:0]; 
    [modalNavBar setBarStyle:UIBarStyleBlack]; 
} 

当然,这是极其容易因为我假设这些索引的子视图数组中的项目是我所期望的。

如果您要尝试这种方法,我会谨慎行事,并在继续前进行尽可能多的检查。在访问特定索引之前检查数组的界限 - 检查这些索引中的对象是否响应您要发送给它们的方法,等等。

同样,我不认为我可以推荐这种方法用于运输应用程序,但我不知道有任何其他方式在iOS 5之前通过它的UI自定义API来执行此操作。

+0

它的工作原理!因为做一些检查,我稍微改变了一点。 – Marsson

+0

请注意!我无愧于自己的一切责任! ;) – Jasarien

+0

大声笑...我做了一些变化和检查当然...张贴... – Marsson

0

第一个答案完美的作品,但我想要一些检查... 这样,最糟糕的事情可能发生(除了苹果不批准该应用程序)是该栏不会改变颜色。 谢谢Jasarien的指导!

- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers 
{ 
    //Prepara a variavel que vai armazenar a view; 
    UIView* edtView=nil; 


    for (int i=0; i<[[[self.tabBarController view] subviews]count]; i++) { 
     //checa se a subview é da classe esperada... 
     if ([NSStringFromClass([[[[self.tabBarController view] subviews] objectAtIndex:i]class]) isEqualToString:@"UITabBarCustomizeView"]) 
     { 
      //Beleza... quebra o laço... 
      NSLog(@"Achei!! sou eu do Indice %d",i); 
      edtView=[[[self.tabBarController view] subviews] objectAtIndex:i]; 
      break; 
     } 
    } 
    //Se nao achar a variavel, sabe-se lá deus por que, sai do método. 
    if (edtView==nil) { 
     return; 
    } 

    //Pega a NavigationBar 
    UINavigationBar *modalNavBar = nil; 

    for (int i=0; i<[[edtView subviews]count]; i++) { 
     //checa se a subview é da classe esperada... 
     if ([[[edtView subviews]objectAtIndex:i]isKindOfClass:[UINavigationBar class]]) 
     { 
      //Beleza... quebra o laço... 
      NSLog(@"Achei!! sou eu do Indice %d",i); 
      modalNavBar=[[edtView subviews]objectAtIndex:i]; 
      break; 
     } 

    } 
    //checa se a navBar existe 
    if (modalNavBar==nil) { 
     return; 
    } 
//muda a cor da navBar!!! 
[modalNavBar setBarStyle:UIBarStyleBlack]; 
} 
0

有改变所有的导航栏样式,而不是单独改变每一个或设置代表们使用TabBar或其他任何一个更简单的方法:

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack]; 

只需设置该代码的一个你的初始意见。有了这个,更多的导航控制器和配置导航控制器(在点击更多导航控制器中的“编辑”后出现)可以获得不同的风格。像这样,您可以将其颜色更改为不同的颜色或更改背景图像。

希望这会有所帮助。