Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在ContainerViewController中切换ChildViewController(加载新控制器,“删除”旧控制器)_Ios_Swift_Uiviewcontroller - Fatal编程技术网

Ios 如何在ContainerViewController中切换ChildViewController(加载新控制器,“删除”旧控制器)

Ios 如何在ContainerViewController中切换ChildViewController(加载新控制器,“删除”旧控制器),ios,swift,uiviewcontroller,Ios,Swift,Uiviewcontroller,好的,下面是我的计划(我还没做): 我想要一个能容纳3个视图控制器的容器视图控制器: InfoVC:顶部有一个小的“信息”部分 MenuVC:一个菜单(位于InfoVC的视图下方),用于选择要在ContentVC中显示的页面 ContentVC:ViewControllers表示不同页面(如OverviewContentVC,MessagesContentVC,…) InfoVC和MenuVC应该始终保持某种静态。它们不会改变。 但是,当您在菜单中选择一个页面时,视图中的内容VC应该加载相应的内

好的,下面是我的计划(我还没做): 我想要一个能容纳3个视图控制器的
容器视图控制器

  • InfoVC:顶部有一个小的“信息”部分
  • MenuVC:一个菜单(位于InfoVC的
    视图
    下方),用于选择要在ContentVC中显示的页面
  • ContentVC
    ViewControllers
    表示不同页面(如
    OverviewContentVC
    MessagesContentVC
    ,…)
  • InfoVCMenuVC应该始终保持某种静态。它们不会改变。 但是,当您在
    菜单中选择一个页面时,
    视图
    中的内容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似乎不适合这样做。我不需要一个页面和东西的顺序。