IOS swift我怎样才能在删除超级视图或在子视图中解除它之间进行检查

时间:2017-06-12 01:48:26

标签: ios swift swift3 subviews superview

我有一个两难的境地,似乎无法正确解决。我有一个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)
    }

1 个答案:

答案 0 :(得分:1)

您打开的内容为addChildViewController - 您应关闭,因为它是ViewController,当您以addSubview打开时 - 请按removeFromSuperview关闭,因为它是在另一个视图中查看。我想,它会崩溃,因为你的ViewController没有superview。如果您已经打开了很多,并且您不想返回并以适当的方式重写它,您可以检查您的视图是否具有超级视图,并根据您收到的布尔值选择解除或删除SuperSuperview - { {1}}