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

时间:2018-07-21 16:41:34

标签: 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()
    }
}

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

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

2 个答案:

答案 0 :(得分:2)

您的addremove应该从同一角度来看。在两种情况下,self应该是父视图控制器,在两种情况下,self应该是子视图控制器。现在,您似乎拥有add为父的selfremove为孩子的self

这是您的扩展名,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()
    }
}

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

答案 1 :(得分:0)

最好从孩子而不是父母那里考虑

renderToString()

//

$('.type').next().text();