如何从容器视图中删除 UIViewController?

Adr*_*ian 2 ios swift

这就是我所做的。添加部分正在工作,但删除部分不起作用:

extension UIViewController {
    func add(_ child: UIViewController, containerView: UIView) {
        addChildViewController(child)
        containerView.addSubview(child.view)
        child.didMove(toParentViewController: self)
    }

    func remove(containerView: UIView) {
        guard parent != nil else { return }

        willMove(toParentViewController: nil)
        removeFromParentViewController()
        containerView.removeFromSuperview()
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试更新此代码,该代码最初会添加和删除子视图控制器。但我想要的是在容器视图中添加和删除。

有人可以指出删除部分有什么问题吗?

rma*_*ddy 6

addremove应该都来自同一个观点。无论是self应该在两种情况下,父视图控制器或self应该在这两种情况下的子视图控制器。现在,你似乎有addself作为家长和removeself作为孩子。

这是您的扩展名,self孩子在哪里:

extension UIViewController {
    func add(_ parent: UIViewController) {
        parent.addChildViewController(self)
        parent.view.addSubview(view)
        didMove(toParentViewController: parent)
    }

    func remove() {
        guard parent != nil else { return }

        willMove(toParentViewController: nil)
        removeFromParentViewController()
        view.removeFromSuperview()
    }
}
Run Code Online (Sandbox Code Playgroud)

唯一缺少的是在将子视图控制器frame添加到父控制器后设置子视图控制器的视图。在调用后添加这样一行add或添加一个框架作为第二个参数到add