Ios 如何在ContainerViewController中切换ChildViewController(加载新控制器,“删除”旧控制器)
好的,下面是我的计划(我还没做): 我想要一个能容纳3个视图控制器的Ios 如何在ContainerViewController中切换ChildViewController(加载新控制器,“删除”旧控制器),ios,swift,uiviewcontroller,Ios,Swift,Uiviewcontroller,好的,下面是我的计划(我还没做): 我想要一个能容纳3个视图控制器的容器视图控制器: InfoVC:顶部有一个小的“信息”部分 MenuVC:一个菜单(位于InfoVC的视图下方),用于选择要在ContentVC中显示的页面 ContentVC:ViewControllers表示不同页面(如OverviewContentVC,MessagesContentVC,…) InfoVC和MenuVC应该始终保持某种静态。它们不会改变。 但是,当您在菜单中选择一个页面时,视图中的内容VC应该加载相应的内
容器视图控制器
:
视图
下方),用于选择要在ContentVC中显示的页面ViewControllers
表示不同页面(如OverviewContentVC
,MessagesContentVC
,…)菜单中选择一个页面时,视图
中的内容VC应该加载相应的内容视图控制器
。这意味着,它需要删除/取消显示当前内容ViewController
(并将其从容器ViewController
)中删除),并用新内容替换它
我不知道该怎么做
下面是我对此的一些想法。如果有人能帮我,我会非常感激的。也许我的方法不太正确
首先,我将contentVC
作为属性添加到我的容器视图控制器中
:
var contentVC: UIViewController?
然后,在某种方法中(viewDidLoad
e.g.),我将添加contentVC
作为子项:
contentVC = OverviewContenVC() // default VC
self.addChildViewController(contentVC!)
contentVC!.view.frame = ...
self.view.addSubview(contentVC!.view)
contentVC!.didMove(toParentViewController: self)
现在,用户点击菜单,想要进入messagescontervc
。这是我的想法:
contentVC!.removeFromParentViewController()
contentVC!.view.removeFromSuperview()
contentVC = MessagesContentVC() // does this deinit OverviewContentVC?
// Do the same steps as above to add the new childVC
显然,我可以将这两个代码片段组合在一起,并将它们放在一个方法中。这只是为了证明我的想法
此外,你可以做各种各样的动画
但我不确定这是否是一个可接受的解决方案。例如,如果messagescontervc
需要几秒钟才能加载(这可能不好,但是如果呢)?也许我可以把这个代码放到后台线程中
谢谢你的帮助 您好@Quantm您是否想过在容器视图中使用UIPageViewController,以便添加所需的控制器数量?好主意。我将对此进行研究(我将在没有数据源的情况下实现它,以防止滑动手势)。但是性能呢?pageViewController是否只初始化它所需的viewController?好的,它看起来不起作用。UIPageViewController似乎不适合这样做。我不需要一个页面和东西的顺序。