在我的应用程序中,我有一个复杂的视图,其中包含:
一个 corePlot 图
一个集合视图(由核心数据控制)
和一些其他视图,(由核心数据不同的请求控制)
集合视图中的项目,可以复制到核心情节。
我认为拥有多个视图控制器会更好、更容易:
一个控制器用于核心绘图,一个控制器用于集合视图,依此类推。因为如果我只有一个视图控制器来控制所有这些项目,它将是一个包含大量代码且结构不完善的巨大文件。
我可以使用 Container 来解决这个问题吗?还是坚持使用巨大的 ViewController 文件更好?还是有其他解决方案?如果是,这个解决方案可以在情节提要中完成吗?
2 回答
Container View Controller似乎非常适合您的需求:
所有步骤都列在上面的链接中,但简而言之:
- 您将子视图控制器添加到容器中[self addChildViewController:childVC]
- 然后设置容器的视图[self.view addSubview:childVC.view]
- 然后告诉子视图控制器它已在容器中设置和[childVC didMoveToParentViewController:self]
然后如果你想切换到一个新的子视图控制器:
- 调用[self addChildViewController:newVC]
and [source willMoveToParentViewController:nil]
,所以容器知道你要切换子视图控制器。
- 然后进行过渡:
[self transitionFromViewController:oldVC toViewController:newVC
duration:/*you duration*/
options:/*your options*/
animations:/*your animations*/
completion:/*your completion*/]
- 并在结束通话
[oldVC removeFromParentViewController]
时[newVC didMoveToParentViewController:self]
让容器知道切换已完成。
希望有帮助。
您可以为视图使用不同的视图控制器。但是,您必须尝试这种技巧,因为您想在单个场景中同时呈现所有视图控制器的内容。
容器视图控制器是呈现其子视图控制器内容的视图控制器。但是,容器视图一次只显示一个孩子。所以,你必须创建一个视图控制器,并添加尽可能多的容器视图,就像你想要的视图控制器一样多。我附上了一张快照。
希望这可以帮助!
在故事板中实现这一点的步骤: 1) 在 IB 中选择一个视图控制器。
2) 将IB 中的容器视图添加到视图控制器的视图层次结构中。
3)您可以通过简单地删除它并连接您想要的视图控制器来更改容器视图的子视图。
4) 两个容器视图的两个子视图都在情节提要中显示,没有任何代码。
对于视图控制器的初始化和委托 b/w,我强烈建议您 查看 View Controller Programming guide中的示例代码