如何管理应该在父视图控制器中显示哪个控制器?
how to manage which controller should show in parent view controller?
我有一个带有 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()
:
add(asChildViewController: firstViewController)
当你想呈现第二个视图控制器时,你应该删除第一个视图控制器,然后像这样添加你的第二个视图控制器:
remove(asChildViewController: firsttViewController)
add(asChildViewController: secondViewController)
你可以看到这个 link 以获得更多解释:https://cocoacasts.com/managing-view-controllers-with-container-view-controllers/
希望对其他人有所帮助:)
我有一个带有 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()
:
add(asChildViewController: firstViewController)
当你想呈现第二个视图控制器时,你应该删除第一个视图控制器,然后像这样添加你的第二个视图控制器:
remove(asChildViewController: firsttViewController)
add(asChildViewController: secondViewController)
你可以看到这个 link 以获得更多解释:https://cocoacasts.com/managing-view-controllers-with-container-view-controllers/
希望对其他人有所帮助:)