【问题标题】:Check if you can use unwind segue before using a push segue在使用 push segue 之前检查是否可以使用 unwind segue
【发布时间】:2014-04-19 20:21:34
【问题描述】:

在使用 segues 的导航中,我们可以从根控制器推送控制器 A 或 B。

我们可以从 A 推 C,C 可以推 B,B 稍后可以展开到 A 以重新启动该过程。

我们可以从 B 推送 A,后者可以推送 C,稍后可以展开到 B 以重新启动该过程。

在 B 中,我们有一个按钮,上面写着“转到 A”,它必须根据场景展开或推动控制器 A。

如何在执行 push segue 之前轻松知道自己是否可以放松?

现在我使用 navigationController 数组来检查前一个控制器是 C 来推动还是展开。我想知道使用 segues 的这种循环的通用解决方案,例如:

如果B可以展开到A 那么展开否则推A

那么,问题是,如何在不访问 navigationController 数组的情况下检查 B 是否可以展开到 A

【问题讨论】:

  • 你找到解决方案了吗?
  • 很遗憾,不,我必须实施一种解决方法来在 B 中设置“unwindMode”,然后当它想要呈现 A 时,它会检查模式以使用 push segue 或 unwind segue
  • 你为什么不简单地使用popToRootViewController,因为据我所知,你的目的是导航回根视图控制器。

标签: ios storyboard uistoryboard segue uistoryboardsegue


【解决方案1】:

这是我针对 Swift 应用程序解决此问题的通用解决方案:

  • 假设 UINavigationController 包含
  • 在每个要放松的 XXX 中定义 unwindToXXX: 方法
  • 在每个可以展开或推送到 XXX 的 YYY 中,定义 segues unwindToXXXshowXXX

那么你可以简单地调用gotoController("unWindToXXX", "showXXX")给定

func gotoController(unwind: String, show: String) {
    let action = Selector(unwind + ":")
    if let target = navigationController?.viewControllerForUnwindSegueAction(action, fromViewController: self, withSender: self)
    {
        assert(target.canPerformUnwindSegueAction(action, fromViewController: self, withSender: self))
        performSegueWithIdentifier(unwind, sender: self)
    } else {
        performSegueWithIdentifier(show, sender: self)
    }
}

【讨论】:

  • viewControllerForUnwindSegueAction 在 iOS 9.0 中已弃用。
猜你喜欢
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 2015-09-29
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
相关资源
最近更新 更多