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注意事项

何时调用 addChildViewController

addChildViewController 不适合 UIViewController

iOS开发 关于addChildViewController的理解