这就是我所做的。添加部分正在工作,但删除部分不起作用:
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)
我尝试更新此代码,该代码最初会添加和删除子视图控制器。但我想要的是在容器视图中添加和删除。
有人可以指出删除部分有什么问题吗?
你add和remove应该都来自同一个观点。无论是self应该在两种情况下,父视图控制器或self应该在这两种情况下的子视图控制器。现在,你似乎有add与self作为家长和remove与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()
}
}
Run Code Online (Sandbox Code Playgroud)
唯一缺少的是在将子视图控制器frame添加到父控制器后设置子视图控制器的视图。在调用后添加这样一行add或添加一个框架作为第二个参数到add。
| 归档时间: |
|
| 查看次数: |
3891 次 |
| 最近记录: |