-1

如图所示,我有一个带有 5 个容器视图的父视图控制器:在此处输入图像描述

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

4

1 回答 1

0

我不知道情节提要有什么问题,但我的问题是:因为我将 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()

        add(asChildViewController: firstViewController)

当你想展示第二个视图控制器时,你应该删除第一个视图控制器,然后像这样添加你的第二个视图控制器:

remove(asChildViewController: firsttViewController)
add(asChildViewController: secondViewController)

您可以查看此链接以获取更多说明:https ://cocoacasts.com/managing-view-controllers-with-container-view-controllers/

希望对其他人有所帮助:)

于 2019-07-01T12:51:14.860 回答