首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在moreNavigationController 7中自定义iOS

在moreNavigationController 7中自定义iOS
EN

Stack Overflow用户
提问于 2014-01-15 16:54:28
回答 2查看 2.6K关注 0票数 1

我知道这个话题已经有了一些线索,但它们只是部分地解决了我的问题。我设法自定义了moreNavigationController navigationBar颜色和标签颜色,请参见以下内容:

但是,通过自定义视图,我遇到了一些问题,如果您单击右侧的“编辑”,则会显示该视图。目前的情况如下:

我想实现什么?

  • 用白色涂上颜色
  • 将navigationBar涂成红色
  • 将图标着色为红色。

我已经在AppDelegate中获得了对我的AppDelegate的引用

代码语言:javascript
运行
复制
 UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;

我还设置了这个tabBarController的委托,也调用了委托方法- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers。但从那以后我就不能给这三个控件上色了。有人给我提示了吗?

例如:

代码语言:javascript
运行
复制
id modalViewCtrl = [[[tabBarController view] subviews] objectAtIndex:1];
if([modalViewCtrl isKindOfClass:NSClassFromString(@"UITabBarCustomizeView")] == YES)
    ((UINavigationBar*)[[modalViewCtrl subviews] objectAtIndex:0]).barTintColor = [UIColor redColor];

此外,这也是:

代码语言:javascript
运行
复制
- (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”。但我不太确定如何检索不同的控件来设置它们的颜色值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-15 17:14:22

我找到了答案。我应该记录edit_views,这样我就会看到,navigationBar位于索引1,而不是0。然后在索引2-末端有一个UITabBarButtons,我不能设置正确的颜色..。

最终代码如下所示:

代码语言:javascript
运行
复制
- (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];
    }
}
票数 2
EN

Stack Overflow用户

发布于 2014-12-17 17:23:05

您可以通过使用UIView和设置窗口的tintColor来实现这一效果,而不需要混淆UIAppearance层次结构。因此,您可以将此代码放置在application:didFinishLaunchingWithOptions:中。

代码语言:javascript
运行
复制
[self.window setTintColor:[UIColor redColor]];
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
[[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];

如果希望在不同的视图控制器中对导航条进行不同的样式设置,还可以通过使用UIAppearance限制appearanceWhenContainedIn:代码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21143498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档