在同一个按钮中多次展开 - Swift

Multiple unwind in the same button - Swift

我想知道是否可以在同一个按钮上分配两种不同的展开方法。例如:

我有这个视图导航:

A 和 C 视图导航到 B,但我想 return 使用相同的 B 视图和控制器转到以前的视图。

有可能吗?

我一直在考虑根据出现的视图以编程方式为按钮编写分配展开方法。

提前致谢

抱歉我的英语不好。

虽然,问题不是很清楚。但我能理解的是,您想导航回之前的视图,即 B>C 或 B>A,具体取决于用户来自何处。

如果是,则检查 UINavigationController。它跟踪导航历史并自动添加后退按钮。有点像我们浏览器中的后退按钮。

这里有一个教程,虽然有点旧:Link

这是一个对我很有效的 Swift 解决方案。下面的代码只有在你在故事板和代码中正确连接你的 segues 时才有效。查看此 page 以获得有关设置展开转场的详细解释。

总结:

  1. 您正在从多个其他视图访问同一视图。因此,当您转到一个视图时,您可以将源视图控制器(您当前所在的视图)传递给您将要访问的视图中的 属性。

  2. 在您认为您将放松的情况下,您可以检查 属性 保存您来自哪里的信息(class),然后执行segue 基于它是什么视图。

代码:(使用示例:主页 -> A -> B 或...主页 -> C -> B)

注意:B 是将展开到多个不同视图的视图。

在 A 或 C 中:(代码在两个视图中的工作方式相同)

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "segueIdentifierInViewAthatGoesToViewB" {  
        let controller:B = segue.destinationViewController as! B
        //the code below passes our current view controller class to a property in view B. 
        //So, view B will know what view we came from. 
        //In our example, we're coming from view A or C
        controller.viewControllerNavigatedFrom = segue.sourceViewController
    }
}

在 B 中:

//设置一个 IBAction,它将检查源视图控制器(我们在转至此视图时传递的)并根据我们来自的位置执行转场。你可以把它连接到一个按钮或任何你真正想要的东西上。

//isKindOfClass(A) - "A" 将是您的 class

的名称
//setup a property to receive the view controller class where we are coming from
var viewControllerNavigatedFrom:AnyObject?

@IBAction func myButtonPressed(sender: AnyObject) {
    if self.viewControllerNavigatedFrom!.isKindOfClass(A) {
        //Unwind to view A
        performSegueWithIdentifier("unwindFromBbackToA", sender: sender)
    }
    else if self.viewControllerNavigatedFrom!.isKindOfClass(C) {
        //Unwind to view C
        performSegueWithIdentifier("unwindFromBbackToC", sender: sender)
    }
}