弹出或关闭ViewController

时间:2019-02-16 06:48:03

标签: ios swift uinavigationcontroller dismiss

我有一个“反馈视图控制器”,可以在4个不同的屏幕上的7个位置进行访问。

通过navigationControllerpushViewController中显示它的一种方式。其他6次以模态展示。

这是打开反馈VC的功能

struct Constants{
    static func openFeedback(openFrom: UIViewController, nav:Bool) {
        let fbStoryboard = UIStoryboard(name: "FeedbackViewController", bundle: nil)
        let fbVC = fbStoryboard.instantiateViewController(withIdentifier: "FBSBID")
        fbVC.modalPresentationStyle = .overFullScreen
        fbVC.modalTransitionStyle = .crossDissolve
        if nav {
            openFrom.navigationController?.pushViewController(fbVC, animated: true)
        } else {
            openFrom.present(fbVC, animated: true, completion: nil)
        }
    }
}

通过Constants.openFeedback(openFrom: self, nav: true)Constants.openFeedback(openFrom: self, nav: false)调用反馈VC

打开VC可以正常工作!

这是我在“反馈视图控制器”上的关闭按钮:

@IBAction func closeButtonPressed(_ sender: UIButton) {
    self.dismiss(animated: true, completion: nil)
}

在不在导航堆栈中的情况下,哪7次可工作6次。当它位于导航堆栈中时,关闭按钮不会执行任何操作。

我的问题是,如何根据“反馈视图控制器”是否位于navigationController堆栈中而将其关闭?

1 个答案:

答案 0 :(得分:1)

您可以通过检查控制器的UINavigationController是否为navigationController来简单地检查视图控制器是否嵌入在nil中。

因此,如果它是嵌入式的,则可以在导航控制器上使用popViewController(animated:)来“关闭”推送的控制器

if let navCon = navigationController {
    navCon.popViewController(animated: true)
} else {
    dismiss(animated: true)
}