Ios 如何从容器视图中删除UIViewController?
这就是我所做的。添加部件正在工作,但删除部件不工作:Ios 如何从容器视图中删除UIViewController?,ios,swift,Ios,Swift,这就是我所做的。添加部件正在工作,但删除部件不工作: extension UIViewController { func add(_ child: UIViewController, containerView: UIView) { addChildViewController(child) containerView.addSubview(child.view) child.didMove(toParentViewController:
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()
}
}
我试图更新这段代码,这段代码最初会添加和删除子视图控制器。但我想要的是从容器视图中添加和删除
有人能指出删除部分有什么问题吗? < P>最好从孩子而不是父母考虑。
func remove() {
willMove(toParentViewController: nil)
view.removeFromSuperview()
removeFromParentViewController()
}
//
您的
添加
和删除
应该从同一个角度出发。在这两种情况下,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()
}
}
缺少的唯一一项是在将子视图控制器的视图添加到父控制器后设置其
帧。在调用Add
后添加这样一行,或者在Add
中添加一个框架作为第二个参数Add
和remove
都应该有一个参数-正在添加或删除的视图控制器。好的,那么我如何告诉它从容器视图中删除它呢?不是自我观点?你的意图是什么?是对包含的(父)视图控制器还是包含的(子)视图控制器调用remove
?我认为是包含的。我希望从容器视图中删除添加的vc。如果对子级调用了remove
,则对子级调用add
,并且add
的唯一参数应该是父视图控制器。我不知怎的对这将如何工作感到困惑…我将容器视图作为参数发送?或者我需要添加的视图控制器?因为看起来我需要发送容器视图。您可以在子(包含的)视图控制器上调用add
和remove
。在add
的情况下,传递父(包含)视图控制器remove
与您使用的相同,但已修复以正确删除子视图。谢谢,它;他现在在工作。我被所有这些孩子和家长搞糊涂了。在你的问题中保持添加不变,从家长那里添加,用这个答案替换删除,从孩子那里添加
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()
}
}