在 ContainerView 中打开不同的视图
Posted
技术标签:
【中文标题】在 ContainerView 中打开不同的视图【英文标题】:Open different views in ContainerView 【发布时间】:2018-05-28 07:23:06 【问题描述】:我有这样一个应用程序布局: https://serwer1356363.home.pl/pub/appMenu.png
MainViewControler - 从侧边菜单查看(左侧带有图标的视图 + 来自容器视图的视图用于显示后续视图)。
ConceptViewController - 使用不同的图片(图片按钮)查看。
ConceptGalleryViewController - 在这里我要显示图库。 图库将显示在 MainViewControler 中与显示 ConceptViewController 相同的 containerView 中。
ConceptViewController视图的MainViewControler中ContainerView中的视图用如下代码完成:
@IBOutlet weak var systemContainerView: UIView!
@IBAction func homeButtonPressed(_ sender: Any)
showSubViewInContainerView(view: "HomeView")
func showSubViewInContainerView(view: String)
let controller = storyboard!.instantiateViewController(withIdentifier: view)
addChildViewController(controller)
controller.view.translatesAutoresizingMaskIntoConstraints = false
systemContainerView.addSubview(controller.view)
NSLayoutConstraint.activate([
controller.view.leadingAnchor.constraint(equalTo: systemContainerView.leadingAnchor),
controller.view.trailingAnchor.constraint(equalTo: systemContainerView.trailingAnchor),
controller.view.topAnchor.constraint(equalTo: systemContainerView.topAnchor),
controller.view.bottomAnchor.constraint(equalTo: systemContainerView.bottomAnchor)
])
controller.didMove(toParentViewController: self)
效果很好。
当我单击 ConceptViewController 中的选定图标时,我使用以下代码打开 ConceptGalleryViewController 视图:
var idGallery = 0
@IBAction func shareTheFunBtnChecked(_ sender: Any)
idGallery = 1
self.performSegue(withIdentifier: "toConceptGalleryView", sender: self)
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if segue.identifier == "toConceptGalleryView"
let target = segue.destination as! ConceptGalleryViewController
target.idGallery = idGallery
很遗憾,它无法正常工作。 侧边菜单消失了,我有了一个用于整个屏幕的新板。
如何更改此设置,以便在 ContainerView 中可以看到 ConceptGalleryViewController?
更新
此代码不起作用:
@IBAction func shareTheFunBtnChecked(_ sender: Any)
idGallery = 1
showSubViewInContainerView(view: "ConceptGalleryView")
func showSubViewInContainerView(view: String)
let controller = storyboard!.instantiateViewController(withIdentifier: view)
addChildViewController(controller)
controller.view.translatesAutoresizingMaskIntoConstraints = false
let viewController = self.storyboard?.instantiateViewController(withIdentifier: "MainView") as! MainViewControler
viewController.systemContainerView.addSubview(controller.view)
NSLayoutConstraint.activate([
controller.view.leadingAnchor.constraint(equalTo: viewController.systemContainerView.leadingAnchor),
controller.view.trailingAnchor.constraint(equalTo: viewController.systemContainerView.trailingAnchor),
controller.view.topAnchor.constraint(equalTo: viewController.systemContainerView.topAnchor),
controller.view.bottomAnchor.constraint(equalTo: viewController.systemContainerView.bottomAnchor)
])
controller.didMove(toParentViewController: self)
我有错误:线程 1:致命错误:在代码中展开可选值时意外发现 nil:
viewController.systemContainerView.addSubview(controller.view)
更新 2
如果我正在尝试此代码:
let controller = storyboard!.instantiateViewController(withIdentifier: view)
addChildViewController(controller)
controller.view.translatesAutoresizingMaskIntoConstraints = false
let viewController = self.storyboard?.instantiateViewController(withIdentifier: "MainView") as! MainViewControler
viewController.systemContainerView?.addSubview(controller.view)
controller.didMove(toParentViewController: self)
ConceptGalleryViewController 视图未显示。应用程序什么都不做
【问题讨论】:
尝试检查工作代码github.com/RockinGarg/ContainerView-TabBar.git,一个containerView、三个Button和两个不同的ViewController作为子视图和一个TabBar作为ContainerView中的子视图 不幸的是,它对我不起作用。我在问题中添加了答案 - 更新部分)... 【参考方案1】:请找到我在情节提要中创建容器视图并以编程方式添加子视图的示例应用程序。对我来说效果很好。
源代码在下面的Dropbox链接中上传。
https://www.dropbox.com/s/cz8abhltefbtqpb/ContainerDemo.zip?dl=0
【讨论】:
以上是关于在 ContainerView 中打开不同的视图的主要内容,如果未能解决你的问题,请参考以下文章
嵌入在 containerView 中的 PageViewController 显示前一个视图的小边距