我有一个似乎无法正确解决的困境。我有一个Main_Page然后不同的子视图,例如Menu_Subview和Profile_Subview。我的问题是我不知道是使用"关闭"还是从超级视图中删除,这导致应用程序崩溃。例如
如果我从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)
}
你打开的内容addChildViewController
- 你应该通过关闭关闭,因为它是ViewController
,当你打开时addSubview
- 按removeFromSuperview
关闭它,因为它是另一个视图中的视图。我想,它崩溃了,因为你的视图控制器没有超级视图。如果你打开了很多,并且你不想回去以正确的方式重写它,你可以检查你的视图是否有超级视图,并根据你收到的布尔值选择关闭或删除FromSuperview - if yourView.superview != nil