我知道这个主题已经有一些线索,但他们只是部分地解决了我的问题。 我设法自定义moreNavigationController navigationBar颜色和标签颜色,请参见此处:
但是我通过自定义视图会出现一些问题,如果您单击右侧的“编辑”,则会显示该视图。这就是它当下的样子:
我想要实现什么?
我已经通过
在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”。但我不太确定如何检索不同的控件来设置它们的颜色值。
答案 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];
}
}