【问题标题】:Customizing moreNavigationController in iOS 7在 iOS 7 中自定义 moreNavigationController
【发布时间】:2014-01-15 16:54:28
【问题描述】:

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

但是,如果您单击右侧的“编辑”,则自定义视图会显示一些问题。这是它目前的样子:

我想实现什么?

  • 把完成的东西涂成白色
  • 将导航栏涂成红色
  • 为图标着色为红色

我已经通过

在我的 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”。但我不太确定如何检索不同的控件来设置它们的颜色值..

【问题讨论】:

    标签: ios iphone objective-c uinavigationcontroller uitabbarcontroller


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案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];
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-11
        • 2013-09-24
        相关资源
        最近更新 更多