【问题标题】:UIMoreListController edit modalViewController toolbar (or navigation bar) color changeUIMoreListController 编辑modalViewController 工具栏(或导航栏)颜色变化
【发布时间】:2011-12-01 16:28:37
【问题描述】:

这是我的问题。 我有一个使用 UITabBar 的应用程序,并且在某些视图上使用了一些 NavigationControllers,并且这些条都是黑色不透明的。由于我有超过 6 个选项卡,它会打开 UIMoreListController,到目前为止一切顺利,我可以在那里更改导航栏的颜色。 我的问题是当用户单击编辑按钮来组织 moreListController 上的工具栏时。标题栏(我不知道它是工具栏还是导航栏)是蓝色的。我想将其更改为黑色不透明。有谁知道怎么做?? 最好的祝福! 马塞洛·马森。

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

    我在之前的项目中通过实现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 有任何其他方法可以做到这一点。

    【讨论】:

    • 请注意!我免除自己的一切责任! ;)
    【解决方案2】:

    第一个答案很完美,但我想要一些检查...... 这样,可能发生的最糟糕的事情(除了苹果不批准该应用程序)是该栏不会改变颜色。 感谢 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];
    }
    

    【讨论】:

      【解决方案3】:

      有一种更简单的方法可以更改所有导航栏样式,而不是单独更改每个样式或为标签栏或其他任何内容设置委托:

      [[UINavigationBar appearance] setBarStyle:UIBarStyleBlack]; 
      

      只需在您的一个初始视图中设置此代码即可。这样,您的更多导航控制器和配置导航控制器(在更多导航控制器中单击“编辑”后出现)获得不同的样式。像这样,您可以将其颜色更改为不同的颜色或更改背景图像。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-04
        相关资源
        最近更新 更多