呈现 ViewController 与添加 ViewController 作为 child 有什么区别
What is the difference between presenting a ViewController vs adding a ViewController as a child
我刚刚读了一篇 interesting article,它向我介绍了一个我以前从未听说过的新概念,即添加一个 ViewController
作为另一个 [=15= 的 child ].本文使用 UIActivityIndicatorView
作为示例来演示何时使用 addChild
方法的常见用法,这让我想知道为什么你会使用该方法而不是仅仅呈现视图控制器。
我不完全理解的部分是使用该特定方法的好处,因为作为 child 呈现和添加都可以以可重复使用的方式模块化。
你什么时候会使用 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)
很简单。 addChild
is when you want to embed the view controller in you parent view controller (you will also need to follow up with a view.addSubview(child.view)
). present
是您想要展示它的时候...可以将其视为换屏。
addChild
:
present
:
不同之处在于,当您呈现控制器时,它会变成模态,而当您将其添加为 child 控制器时,它不会。区别在于语义和用例。
模态
作为模态 window 的示例,想象一下 window 在 macOS 中带有一个确定按钮,它会阻止您与 parent window 交互,直到您关闭它.
因此,为什么一个特定的控制器只能呈现一个视图控制器:呈现的控制器成为用户交互的“主要”,用户必须将其关闭到 return 到 parent window.
模态 window 的典型示例是警报。
Child
但是 child 视图控制器是另一回事。在特定的 VC.
上可以有任意数量的它们
parent 控制器成为 child 视图控制器的容器。例如,可以有一个包含多个面板的仪表板,每个面板可以是一个单独的控制器。这允许在应用程序的不同部分之间分离逻辑,而不是将所有内容都塞进一个控制器中,以简单的方式实现用户定制等。
parent-child 控制器交互的典型示例是 UINavigationController
:导航控制器是 parent,所有推入其中的视图控制器都是它的 children .我们不会把整个应用的逻辑做成一个uber controller,我们在不同的screen之间分离,navigation controller只负责展示。
我刚刚读了一篇 interesting article,它向我介绍了一个我以前从未听说过的新概念,即添加一个 ViewController
作为另一个 [=15= 的 child ].本文使用 UIActivityIndicatorView
作为示例来演示何时使用 addChild
方法的常见用法,这让我想知道为什么你会使用该方法而不是仅仅呈现视图控制器。
我不完全理解的部分是使用该特定方法的好处,因为作为 child 呈现和添加都可以以可重复使用的方式模块化。
你什么时候会使用 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)
很简单。 addChild
is when you want to embed the view controller in you parent view controller (you will also need to follow up with a view.addSubview(child.view)
). present
是您想要展示它的时候...可以将其视为换屏。
addChild
:
present
:
不同之处在于,当您呈现控制器时,它会变成模态,而当您将其添加为 child 控制器时,它不会。区别在于语义和用例。
模态
作为模态 window 的示例,想象一下 window 在 macOS 中带有一个确定按钮,它会阻止您与 parent window 交互,直到您关闭它.
因此,为什么一个特定的控制器只能呈现一个视图控制器:呈现的控制器成为用户交互的“主要”,用户必须将其关闭到 return 到 parent window.
模态 window 的典型示例是警报。
Child
但是 child 视图控制器是另一回事。在特定的 VC.
上可以有任意数量的它们parent 控制器成为 child 视图控制器的容器。例如,可以有一个包含多个面板的仪表板,每个面板可以是一个单独的控制器。这允许在应用程序的不同部分之间分离逻辑,而不是将所有内容都塞进一个控制器中,以简单的方式实现用户定制等。
parent-child 控制器交互的典型示例是 UINavigationController
:导航控制器是 parent,所有推入其中的视图控制器都是它的 children .我们不会把整个应用的逻辑做成一个uber controller,我们在不同的screen之间分离,navigation controller只负责展示。