1

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

我有这个视图导航:

  • 首页->A->B
  • 首页->C->B

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

有可能的?

我一直在考虑以编程方式将分配展开方法写入按钮,具体取决于视图的出现。

提前致谢

我很抱歉我的英语不好。

4

2 回答 2

1

这是一个对我来说效果很好的 Swift 解决方案。下面的代码只有在故事板和代码中正确连接转场时才有效。查看此页面以获取有关设置 unwind segues 的详细说明。

总之:

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

  2. 在您将放松的观点中,您可以检查包含您来自哪里的信息(类)的属性,然后根据它的视图执行 segue。

代码:(使用前:Home -> A -> B 或... Home -> 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,它将检查源视图控制器(我们在segue到这个视图时传递的)并根据我们来自哪里执行segue。你可以把它连接到一个按钮或任何你真正想要的东西上。

//isKindOfClass(A) - "A" 是你的班级名称

//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)
    }
}
于 2015-09-04T14:42:41.767 回答
0

虽然,问题不是很清楚。但我能理解的是,您想要导航回上一个视图,即 B>C 或 B>A,具体取决于用户来自哪里。

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

这是一个教程,虽然有点旧:链接

于 2015-03-02T14:18:26.130 回答