我刚刚读了一篇interesting article这向我介绍了一个我以前从未听说过的新概念,即添加一个 ViewController
作为另一个 ViewController
的子级。本文使用 UIActivityIndicatorView
作为示例来演示何时使用 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/