我有一个两难的境地,似乎无法正确解决。我有一个Main_Page然后是不同的子视图,例如Menu_Subview和Profile_Subview。我的问题是我不知道是否使用Dismiss或从超级视图中移除,这导致应用程序崩溃。例如
如果我从 Main_Page转到Profile_Subview ,那么我可以像这样返回并且可以正常工作
@IBAction func backAction(_ sender: UIButton) {
if let viewWithTag = self.view {
viewWithTag.removeFromSuperview()
}
}
如果我从 Main_Page转到Menu_Subview到Profile_Subview ,那么我就无法使用上面的代码,因为它崩溃了,我必须使用这个
@IBAction func backAction(_ sender: UIButton) {
self.dismiss(animated: true, completion: nil)
}
如何在backAction函数中检测上一个控制器中是否有超视图或子视图?
我的所有子视图都会打开,如下所示
@IBAction func Menu_Action(_ sender: Any) {
let Popup = UIStoryboard(name: "Main", bundle:
nil).instantiateViewController(withIdentifier: "Menu_Subview")
as! Menu_Subview
self.addChildViewController(Popup)
Popup.view.frame = self.view.frame
self.view.addSubview(Popup.view)
Popup.didMove(toParentViewController: self)
}
答案 0 :(得分:1)
您打开的内容为addChildViewController
- 您应关闭,因为它是ViewController
,当您以addSubview
打开时 - 请按removeFromSuperview
关闭,因为它是在另一个视图中查看。我想,它会崩溃,因为你的ViewController没有superview。如果您已经打开了很多,并且您不想返回并以适当的方式重写它,您可以检查您的视图是否具有超级视图,并根据您收到的布尔值选择解除或删除SuperSuperview - { {1}}