【问题标题】:Popping or dismissing a ViewController弹出或关闭 ViewController
【发布时间】:2023-04-11 03:24:02
【问题描述】:

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

通过pushViewController 在navigationController 中呈现它的一种方式。其他 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 堆栈中?

【问题讨论】:

    标签: ios swift uinavigationcontroller dismiss


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-09-14
      • 1970-01-01
      • 2011-07-21
      • 2014-04-14
      • 2012-03-23
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多