addChildViewController 方法仅用于将子视图控制器添加到 containerViewController?
Posted
技术标签:
【中文标题】addChildViewController 方法仅用于将子视图控制器添加到 containerViewController?【英文标题】:addChildViewController method is only for adding child viewControllers to containerViewController? 【发布时间】:2018-03-25 20:59:56 【问题描述】:我看到苹果说这个方法的描述
func addChildViewController(_ childController: UIViewController)
此方法仅供自定义容器视图控制器的实现调用。如果你重写了这个方法,你必须在你的实现中调用 super。
我明白了,很多例子,人们在没有containerViewController
的情况下到处使用addChildViewController
。
例如:我没有使用containerView。我在下面添加了?对吗?
// Create child VC
let childVC = UIViewController()
// Set child VC
self.addChildViewController(childVC)
// Add child VC's view to parent
self.view.addSubview(childVC.view)
// Register child VC
childVC.didMove(toParentViewController: self)
// Setup constraints for layout
childVC.view.translatesAutoresizingMaskIntoConstraints = false
childVC.view.topAnchor.constraint(equalTo: heroView.bottomAnchor).isActive = true
childVC.view.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true
childVC.view.widthAnchor.constraint(equalTo: self.view.widthAnchor).isActive = true
childVC.view.heightAnchor.constraint(equalToConstant: height).isActive = true
【问题讨论】:
【参考方案1】:如文档所述,该方法旨在供可以包含另一个视图控制器的视图控制器使用。例如导航和标签栏控制器。
如果您实现了一个自定义控制器,例如,将一个控制器放在屏幕上半部分,一个放在下半部分,当您设置 bottomHalfViewController
属性时,您将调用 addChildViewController
方法让你的控制器知道它应该处理那个视图控制器作为它的孩子。
这意味着它将转发所有视图生命周期调用,例如viewWillAppear:
【讨论】:
不,文档没有说“containerViewController”。它说“容器视图控制器”。空间很重要。您可以通过向其中添加子视图控制器来使视图控制器成为容器。 @robmayoff 我从来没有说过文档说containerViewController
。
不,但@John 在现已删除的评论中做了。
@robmayoff 好吧,这就解释了。以上是关于addChildViewController 方法仅用于将子视图控制器添加到 containerViewController?的主要内容,如果未能解决你的问题,请参考以下文章
iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)
UISegmentedControl的使用同一个控制器中实现多个View的切换addChildViewController等方法的使用
一个控制器(UIViewController)中需要管理多个tableView,addChildViewController注意事项