在iOS 7中自定义moreNavigationController

时间:2014-01-15 16:54:28

标签: ios iphone objective-c uinavigationcontroller uitabbarcontroller

我知道这个主题已经有一些线索,但他们只是部分地解决了我的问题。 我设法自定义moreNavigationController navigationBar颜色和标签颜色,请参见此处: picture1

但是我通过自定义视图会出现一些问题,如果您单击右侧的“编辑”,则会显示该视图。这就是它当下的样子: picture2

我想要实现什么?

  • 用白色完成的颜色
  • 将导航栏用红色着色
  • 为红色的图标色调着色

我已经通过

在AppDelegate中引用了我的UITabbarController
 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,

没有任何事情或崩溃,因为它“无法在UILabel上设置barTintColor”。但我不太确定如何检索不同的控件来设置它们的颜色值。

2 个答案:

答案 0 :(得分:3)

您可以通过使用UIAppearance并设置窗口的tintColor来实现此效果,而无需弄乱UIView层次结构。因此,您可以将此代码放在application:didFinishLaunchingWithOptions:

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

如果您想在不同的视图控制器中使用不同的导航栏样式,也可以使用appearanceWhenContainedIn:来限制UIAppearance代码。

答案 1 :(得分: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];
    }
}