在多个视图控制器中重用一个容器视图

Posted

技术标签:

【中文标题】在多个视图控制器中重用一个容器视图【英文标题】:re-using one container view in multiple view controllers 【发布时间】:2015-09-21 00:13:45 【问题描述】:

我在我的主视图控制器中设置了一个容器视图。我通过界面生成器进行了配置。主视图控制器保存容器视图,我有自定义类(派生自 UIViewController)来处理容器视图控制器中的工作。我已经在容器视图中布置了所有小部件,并且一切正常。现在,我发现了一个案例,我想在不同的视图控制器中重用相同的代码。

所以我从以下开始验证代码是否被命中:

    iPad_Expansion_ContViewController *kaufer = [iPad_Expansion_ContViewController new];
    [gameController addChildViewController:kaufer];

    kaufer.view.frame = CGRectMake(100, 200, 500, 500);
    kaufer.view.backgroundColor = [UIColor blueColor];

    [gameController.view addSubview:kaufer.view];
    [gameController.view bringSubviewToFront:kaufer.view];

    [kaufer didMoveToParentViewController:gameController];

这确实创建了一个蓝色的大盒子;但是,如何加载我通过界面生成器定义的 containerViewController 的内容?我想我需要类似下面的东西,但我不知道在哪里可以找到通过 Interface Builder 创建的 NIB 名称。

    iPad_Expansion_ContViewController *kaufer = [[iPad_Expansion_ContViewController alloc] initWithNibName:@"???????" bundle:[NSBundle mainBundle]];
    [gameController addChildViewController:kaufer];
    [kaufer didMoveToParentViewController:gameController];

从我所有的网络搜索来看,找到 NIB 名称似乎是微不足道且显而易见的。但是我仍然缺少一些东西……我尝试使用故事板的名称;但是,kaufer 中的所有对象都是 nil,并且屏幕上没有出现任何视图。

【问题讨论】:

【参考方案1】:

嗯,这是一个非常艰难的下午。毕竟我并不疯狂(至少在这件事上没有):从 Xcode 6.4 开始,在情节提要中找到 .xib 名称 viewControllers 比在以前的版本中要困难几个数量级。这两个问题并没有完全解决问题,但它们提供了让我再次动起来的主要线索:

Use initWithNibName with a storyboard

STORYBOARD - doesn't contain a view controller with identifier(哈利克的回答)

事不宜迟,我在 Internet 上发布(正常运行的)以下代码 sn-p:

    UIStoryboard *storyboard = self.storyboard;
    myCustomContViewController *kaufer = (myCustomContViewController *)[storyboard instantiateViewControllerWithIdentifier:@"shopper"];
    [mainController addChildViewController:kaufer];

    [mainController.view addSubview:kaufer.view];
    [mainController.view bringSubviewToFront:kaufer.view];

    [kaufer didMoveToParentViewController:mainController];

【讨论】:

以上是关于在多个视图控制器中重用一个容器视图的主要内容,如果未能解决你的问题,请参考以下文章

如何从容器/父视图控制器和多个子视图控制器共享数据数组

多个容器视图 VS 链接到单个容器视图的多个视图控制器

具有多个子视图问题的容器视图

monotouch - 可重用的 iOS 自定义视图

在 UISplitViewController 中重用详细视图控制器

与多个 Web 应用程序共享控制器和视图