我有一个具有5个容器视图的父视图控制器,如您在图像中看到的:
但是当我运行我的应用程序时,所有子视图控制器都被逐一显示,然后关闭并返回到我的入门视图控制器(这是初始视图控制器,我将其父导航控制器推入了它)。 我想知道如何防止它,以及当父视图控制器显示时如何显示我的第一个视图控制器?
答案 0 :(得分: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/
希望可以帮助其他人:)