在使用推送转场之前,请检查是否可以使用解开转场

12

在使用segues进行导航时,从根控制器可以推送控制器A或B。

从A可以推送C,C可以推送B,B又可以回到A重新开始流程。

从B可以推送A,A可以推送C,C又可以回到B重新开始流程。

在B中有一个按钮,上面写着“去A”,该按钮根据情况必须解开或推动控制器A。

diagram

如何轻松知道是否可以解开以执行push segue?

目前我使用navigationController数组来检查前一个控制器是否为C以进行推送或解开。 我想知道这种循环使用segues的通用解决方案,例如:

如果B可以解开到A ,那么解开,否则推动A

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


1
你有没有找到解决办法? - Ryan Caskey
很遗憾,我不得不实现一个解决方法来设置B中的“unwindMode”,然后当它想要呈现A时,检查模式以使用push segue或unwind segue。 - Nextorlg
既然您的目的是导航回根视图控制器,为什么不直接使用popToRootViewController呢? - Harish Suthar
1个回答

0

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

  • 假设UINavigationController包含
  • 在每个您想要解开的XXX中定义unwindToXXX:方法
  • 在每个可能解开或推送到XXX的YYY中,定义segue 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)
    }
}

1
viewControllerForUnwindSegueAction在iOS 9.0中已被弃用。 - Shai Balassiano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接