【问题标题】:embedding subview in navigation controller在导航控制器中嵌入子视图
【发布时间】:2014-01-29 16:25:07
【问题描述】:

这是我在 Stackoverflow 上的第一篇文章。我是 iOS 开发的新手,我搜索并尝试了很多(两天多),但我真的坚持做应该非常简单的东西。

我有一个主视图(全尺寸 iPhone 视图)。在该视图中,我想要一个较小尺寸的子视图(例如 290 x 400)。此子视图必须嵌入到导航控制器中。换句话说:我想在这个子视图的顶部有一个工作导航栏。

我使用容器视图在 Storyboards 中构建了它。那里没问题。但是,我只想在代码中执行此操作。我成功地用代码制作了一个基于导航控制器的应用程序。我还成功地编写了一个带有子视图控制器的应用程序。问题似乎是结合了这些。

当我尝试在其中一个子视图控制器中加载导航控制器时,应用程序崩溃并说 SubView 视图控制器必须将 Container 视图控制器作为父级,但它现在将 UINavigationcontroller 作为父级。

之后我尝试直接在子视图中加载导航控制器,如下所示:

SubViewVC *subviewcontroller = [[SubVC alloc] initWithNibName:@"SubVC" bundle:nil];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:subviewcontroller];

[navController setView:subviewcontroller.view];

[self.view addSubview:subviewcontroller.view];

但是,现在我遇到了一个崩溃,提示视图一次只能与一个控制器关联。子视图与 SubViewVC 相关联。在将其与 UINavigationcontroller 关联之前,必须清除它。

我了解问题,但不知道如何解决。任何帮助深表感谢。

【问题讨论】:

    标签: ios iphone view uinavigationcontroller containers


    【解决方案1】:

    你做错了几件事。首先,您不需要设置导航控制器的视图,这已经通过使用根视图控制器实例化它来完成。其次,您应该将 navController 的视图添加到您的视图中,而不是 subviewcontroller 的视图中。您还应该将 navController 添加为子项,并设置其视图的框架。像这样的:

    - (void)viewDidLoad {
        [super viewDidLoad];
        SubViewVC *subviewcontroller = [[SubViewVC alloc] initWithNibName:@"SubViewVC" bundle:nil];
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:subviewcontroller];
        [self addChildViewController:nav];
        [nav didMoveToParentViewController:self];
        nav.view.frame = CGRectMake(15, 20, 290, 400);
        [self.view addSubview:nav.view];
    }
    

    【讨论】:

    • rdelmar,你是今天的英雄。非常感谢你。像魅力一样工作。
    猜你喜欢
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2018-11-09
    • 2020-12-08
    • 2019-06-01
    • 1970-01-01
    • 2015-01-23
    相关资源
    最近更新 更多