Ios 如何管理应在父视图控制器中显示哪个控制器?

Ios 如何管理应在父视图控制器中显示哪个控制器?,ios,swift,xcode,storyboard,container-view,Ios,Swift,Xcode,Storyboard,Container View,我有一个带有5个容器视图的父视图控制器,如图所示: 但当我运行我的应用程序时,所有的子视图控制器都会一下子显示出来,它们会关闭并返回到我的启动视图控制器(它是初始视图控制器,我会将父导航控制器推到它)。 我想知道如何防止它,以及如何在显示父视图控制器时显示我的第一个视图控制器?我不知道故事板有什么问题,但我的问题是: 因为我将5个容器视图添加到我的主视图控制器,并通过segue将所有容器视图连接到它们的视图控制器,所以它会显示所有容器视图,然后关闭主视图控制器。 我从故事板中清理所有segue和

我有一个带有5个容器视图的父视图控制器,如图所示:

但当我运行我的应用程序时,所有的子视图控制器都会一下子显示出来,它们会关闭并返回到我的启动视图控制器(它是初始视图控制器,我会将父导航控制器推到它)。
我想知道如何防止它,以及如何在显示父视图控制器时显示我的第一个视图控制器?

我不知道故事板有什么问题,但我的问题是: 因为我将5个容器视图添加到我的主视图控制器,并通过segue将所有容器视图连接到它们的视图控制器,所以它会显示所有容器视图,然后关闭主视图控制器。 我从故事板中清理所有segue和容器视图,我是这样做的:

private lazy var firstViewController: AvailableView = {
        let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
        var viewController = storyboard.instantiateViewController(withIdentifier: "AvailableViewID") as! AvailableView
        self.add(asChildViewController: viewController)

        return viewController
    }()

    private lazy var secondViewController: NotificationView = {
        let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
        var viewController = storyboard.instantiateViewController(withIdentifier: "NotificationViewID") as! NotificationView
        self.add(asChildViewController: viewController)
        return viewController
    }()

    private func add(asChildViewController viewController: UIViewController) {
        addChild(viewController)
        view.addSubview(viewController.view)
        viewController.view.frame = view.bounds
        viewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        viewController.didMove(toParent: self)
    }

    private func remove(asChildViewController viewController: UIViewController) {
        viewController.willMove(toParent: nil)
        viewController.view.removeFromSuperview()
        viewController.removeFromParent()
    }
以及您可以使用它的方式: 在
viewDidLoad()中

当您想要显示第二个视图控制器时,您应该删除第一个视图控制器,然后添加第二个视图控制器,如下所示:

remove(asChildViewController: firsttViewController)
add(asChildViewController: secondViewController)
有关更多说明,请参见此链接:


希望能帮助其他人:)

这有点让人困惑。。。是否要从每个视图控制器推送到下一个视图控制器?能否向我显示解除和推送到父视图控制器的代码?如果您想查看一些关于容器的文档,请参考此文档,这样就没有问题了。这里我想提到的是,您可以在主父控制器中获取每个视图(容器的IBOutlet)的IBOutlet。您可以根据需要隐藏和显示视图。假设您要显示FirstViewController,则容器视图的hidden属性的相关IBOutlet将为false,而所有其他属性将被隐藏。@MubinMall我不知道这一点。谢谢你的指导和信息。现在我完全明白我的问题出在哪里了。我没有设置容器视图的任何IBOutlet。
remove(asChildViewController: firsttViewController)
add(asChildViewController: secondViewController)