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