使用UINavigationBar后退按钮浏览所需视图(同时跳过某些视图)

时间:2015-06-29 08:36:44

标签: ios swift

我正在使用UICollectionView来显示图像列表。 1)通过单击任何单元格,图像及其中的一些描述将显示在生成的视图控制器中(使用推送segue)。

2)当我从左/右边缘滑动时(使用PanGesture)我需要在集合视图中显示上一个/下一个图像的细节。

3)但是导航栏的后退按钮必须带我回到集合视图而不是之前显示的细节(由PanGesture显示)。

我知道如何完成1和2,但没有具体的想法来完成第3个工作。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

您可以使用for循环在导航堆栈中找到所需的UIViewController。试试这个。这是在Swift

 for (var i = 0; i < self.navigationController?.viewControllers.count; i++) {

                if (self.navigationController?.viewControllers[i].isKindOfClass(YourViewController) == true) {

                    println("is sw \(self.navigationController!.viewControllers[i])")

                    (self.navigationController!.viewControllers[i] as! YourViewController)

                    self.navigationController?.popToViewController(self.navigationController!.viewControllers[i] as! YourViewController, animated: true)


                    break;
                }

答案 1 :(得分:1)

当您从一个视图导航到另一个视图时(例如,通过逐个显示图像的详细视图,然后所有这些视图都在内部堆叠成堆栈。

因此,如果你想直接跳到这个堆栈之间的某个地方(例如集合视图),那么你可以使用Unwind Segue。

在你的情况下,它应该像这样工作:

首先,在您的集合视图(即您的后退按钮目标)中,您需要实现如下的UIStoryboard Segue

@IBAction func myGoBackPoint(segue: UIStoryboardSegue) {
    println("Jump directly back here from any other view")
}

然后,在详细视图的故事板中,您可以直接拖动到最右上方的Exit标记,然后选择之前创建的后退按钮目标:

Unwind Segue

在详细视图的代码中,实现&#34;返回指令&#34;

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
   if segue.identifier == "My Unwind Segue" {
      if let myUnwindSegue = segue.destinationViewController as? MyCollectionViewController {
         // prepare for segue
      }
   }
}

希望这有帮助。

答案 2 :(得分:0)

最后经过研究后我发现使用一个集合视图,每个单元占用整个屏幕是解决这个问题的最好方法。

谢谢你