IOS swift 我如何在删除超级视图或在子视图中关闭它之间进行检查

IOS swift how can I Check between remove super view or dismissing it in subviews

我有一个似乎无法正确解决的难题。我有一个 Main_Page 然后是不同的子视图,例如 Menu_Subview 和 Profile_Subview 。我的问题是我不知道是使用 Dismiss 还是 remove fromsuperview,这会导致应用程序崩溃。例如

如果我从 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函数中检测上一个controller中是否有superview或subview?

我所有的子视图都打开如下

   @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 关闭它,因为它是另一个视图中的视图。我想,它崩溃了,因为你的 ViewController 没有超级视图。如果你已经打开了很多,并且你不想返回并以适当的方式重写它,你可以只检查你的视图是否有超级视图,并根据你收到的布尔值选择关闭或删除FromSuperview - if yourView.superview != nil