gpt4 book ai didi

ios - UIViewController.addChild() 是如何工作的

转载 作者:行者123 更新时间:2023-12-01 18:34:24 24 4
gpt4 key购买 nike

当我在另一个 View Controller 中添加 ViewController 时,我应该 addChild,没有这个,它不起作用

@objc func openMenuHandler() {
let menuController = MenuController()
menuController.view.frame = CGRect(x: -menuWidth, y: 0, width: menuWidth, height: self.view.frame.height)

let keyWindow = UIApplication.shared.windows.filter({$0.isKeyWindow}).first
keyWindow?.addSubview(menuController.view)

addChild(menuController) // I should add this line to display UITableViewController properly
}
但是如果我在类范围内初始化 UITableViewController,它可以工作 没有 addChild 方法
    let menuController = MenuController() // this line in UIViewController class scope


@objc func openMenuHandler() {
self.menuController.view.frame = CGRect(x: -menuWidth, y: 0, width: menuWidth, height: self.view.frame.height)

let keyWindow = UIApplication.shared.windows.filter({$0.isKeyWindow}).first
keyWindow?.addSubview(self.menuController.view)
}

最佳答案

顺便说一句,除了简单的“确保 subview Controller 没有被释放”之外,addChild有更深层次的目的,确保将相关 View Controller 添加到 View Controller 层次结构中,作为“ View Controller 包含”API 的一部分。确保在 subview Controller 上调用各种与外观相关的方法(例如 viewDidAppear 、旋转事件等)。如the documentation说, View Controller 包含调用,“允许 iOS 正确地将事件路由到 subview Controller 和这些 Controller 管理的 View 。”

顺便说一句,正确的顺序是:

  • addChild subview Controller 到父 View Controller 的 subview ;
  • 将 subview Controller 的 View 添加到其父 View 的层次结构中;和
  • 调用 child.didMove(toParent:self) 告诉 child 它已被添加到父 View Controller 中。

  • 如果必须删除 subview ,则顺序为:
  • 调用 child.willMove(toParent: nil) 告诉 child 它将从 parent 的 View Controller 中删除。
  • 从其父 View 层次结构中删除 subview Controller 的 View ;和
  • 调用 removeFromParent 在 subview Controller 上完成该过程。
  • 关于ios - UIViewController.addChild() 是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62724841/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com