在多个视图控制器中重用一个容器视图
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];
【讨论】:
以上是关于在多个视图控制器中重用一个容器视图的主要内容,如果未能解决你的问题,请参考以下文章