ios - 如何在 Storyboard 中嵌套视图控制器
问题描述
IOS 应用程序在 Android 中是否有 Fragments 的替代品?例如,我想创建一个带有侧边栏的视图。所以,我有一个包含 2 个其他视图的容器。现在,我正在以编程方式做所有事情。就像创建 3 个视图控制器:用于容器、侧边栏和主屏幕。我稍后使用 addSubView 方法添加 2,但我想将视图控制器嵌套在情节提要中,而不是以编程方式添加视图控制器。我可以以编程方式嵌套视图控制器,但想使用拖放界面来做同样的事情。
我正在使用以下代码添加子视图:
let homeController = HomeController()
homeController.delegate = self
centreController = UINavigationController(rootViewController: homeController)
view.addSubview(centreController!.view)
addChild(centreController!)
centreController?.didMove(toParent: self)
那么,有没有办法使用故事板获得相同的效果?我是 IOS 新手,所以可能缺少一些常见功能。
解决方案
UIKit 中最接近的可能是 Container View Controller:
来自 Android 开发者文档(片段):
您可以将片段视为活动的模块化部分,它有自己的生命周期,接收自己的输入事件,并且可以在活动运行时添加或删除(有点像“子活动”,您可以在不同的活动中重复使用)。
来自 IOS 开发人员文档(容器视图控制器):
容器视图控制器通过将您的内容与您在屏幕上显示该内容的方式分开来促进更好的封装。与显示应用数据的内容视图控制器不同,容器视图控制器显示其他视图控制器,将它们排列在屏幕上并处理它们之间的导航。
步骤1
UIContainerView
像普通视图一样从组件选择库中拖动。Xcode 将为它创建一个新的 ViewController。
第2步
将普通视图约束添加到容器视图中,与任何视图组件相同。
第 3 步
将 Container View Controller 用作独立的容器。
我为你做了一个演示项目:https ://github.com/atapp/ContainerDEMO
推荐阅读
- android - Index 1 out of range [0..1)
- azure - 如何将两个不同的 Web 应用程序部署到具有不同自定义域的单个 Azure 应用程序服务?
- php - 在php中重置获取
- reactjs - 在 useDrop:hover(props,monitor,components) 钩子上未定义组件参数
- drupal-8 - IIS 中 Shibboleth SP 的 Drupal 模块 shib_auth 配置
- .net - 单击按钮时处理的 FormClosing 事件
- class - 子类的 Kotlin 变量初始化在初始化值为 0 的变量时表现得很奇怪
- node.js - 我怎样才能从孩子本身杀死孩子进程?
- php - 登录会话不会在 Laravel 6 中持续存在
- r - 为什么分类的拟合模型评估和混淆矩阵的准确性差异如此之大。使用 R