ios - 呈现 ViewController 与添加 ViewController 作为子项有什么区别

标签 ios swift presentviewcontroller

我刚刚读了一篇interesting article这向我介绍了一个我以前从未听说过的新概念,即添加一个 ViewController 作为另一个 ViewController 的子级。本文使用 UIActivityIndi​​catorView 作为示例来演示何时使用 addChild 方法的常见用途,这让我想知道为什么要使用该方法而不是仅仅呈现 View Controller 。

我不完全理解的部分是使用该特定方法的好处,因为作为子项呈现和添加都可以以可重用的方式模块化。

什么时候您会使用 addChild 而不仅仅是呈现它?什么时候这才有意义?

添加子项:

let parent = UIViewController()
let child = MyViewController()

parent.view.addSubview(child.view)
parent.addChild(child)
child.didMove(toParent: parent)

现在:

let storyboard : UIStoryboard = UIStoryboard(name: "StoryboardName", bundle:nil)
let myVC  = storyboard.instantiateViewController(withIdentifier: "myViewController") as! MyViewController
self.present(myVC , animated: true, completion: nil)

最佳答案

不同之处在于,当您呈现 Controller 时,它会变成模态,而当您将其添加为子 Controller 时,它不会。区别在于语义和用例。

模态

作为模态窗口的示例,想象一下 macOS 中带有“确定”按钮的窗口,该窗口会阻止您与父窗口交互,直到您将其关闭。

因此,为什么特定 Controller 只能呈现一个 View Controller :所呈现的 Controller 成为用户交互的“主要” Controller ,用户必须关闭它才能返回到父窗口。

模态窗口的典型示例是警报。

子级

但是 subview Controller 则是另一回事。特定 VC 上可以有任意数量的它们。

父 Controller 成为 subview Controller 的容器。例如,可以有一个具有多个面板的仪表板,每个面板可以是一个单独的 Controller 。这允许分离应用程序不同部分之间的逻辑,而不是将所有内容都塞到单个 Controller 中,以简单的方式实现用户自定义等。

父子 Controller 交互的典型示例是UINavigationController:导航 Controller 是父 Controller ,插入其中的所有 View Controller 都是其子 Controller 。我们不会用整个应用程序的逻辑来制作 super Controller ,我们将其隔离在不同的屏幕之间,导航 Controller 只负责呈现。

关于ios - 呈现 ViewController 与添加 ViewController 作为子项有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64583231/

相关文章:

swift - 呈现的 View Controller 更改主视图的值

ios - 呈现一个 View Controller ,关闭它并在 Swift 中呈现一个不同的 View Controller

ios - 在 View Controller 层次结构中弹出时是否调用 viewDidLoad?

iphone - 如何检查 ios 的互联网连接类型

ios - 无法使用类型为 'Double' 的参数列表调用类型为 '(String?)' 的初始值设定项 - Swift Storyboard

ios - 无法识别的选择器调用 "_setApplicationIsOpaque:"

ios - 后台获取不工作

android - 在 React-Native Expo 的应用程序购买中?

ios - 从 JSON 中获取字典的值

ios - swift - iOS 9 : How do i present UIViewController with custom size in iOS 9?