Ios 使用UINavigationBar后退按钮在所需视图中导航(同时跳过某些视图)

Ios 使用UINavigationBar后退按钮在所需视图中导航(同时跳过某些视图),ios,swift,Ios,Swift,我正在使用UICollectionView显示图像列表。 1) 通过单击任何单元格,图像及其相关描述将显示在生成的视图控制器中(使用推送序列) 2) 当我从左/右边缘(使用PanGesture)滑动时,我需要在集合视图中显示上一个/下一个图像的详细信息 3) 但是导航栏的后退按钮必须将我带回集合视图,而不是先前显示的详细信息(由PanGesture显示) 我知道如何完成1和2,但没有具体的想法来完成第三项工作 任何帮助都将不胜感激。您可以使用for循环在导航堆栈中找到所需的UIViewContr

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

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

3) 但是导航栏的后退按钮必须将我带回集合视图,而不是先前显示的详细信息(由PanGesture显示)

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


任何帮助都将不胜感激。

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

 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;
                }
for(var i=0;i
当您从一个视图导航到另一个视图时(例如,通过一个接一个地显示图像的详细视图),所有这些视图都会作为堆栈在内部堆积起来

因此,如果您想直接跳转到此堆栈之间的某个视图(例如集合视图),则可以使用“展开”序列

在您的情况下,它应该是这样工作的:

首先,在集合视图(即返回按钮目的地)中,您需要实现UIStoryboard Segue,如下所示

@IBAction func myGoBackPoint(segue: UIStoryboardSegue) {
    println("Jump directly back here from any other view")
}
然后,在细节视图的情节提要中,按住ctrl键并直接拖动到最右上方的退出标记,然后选择先前创建的后退按钮目标:

在详细视图的代码中执行“返回指令”


希望这能有所帮助。

经过大量研究后,我终于发现使用集合视图,每个单元格占据整个屏幕是解决此问题的最佳方法


谢谢

但是我必须从当前视图开始将此代码和自定义后退按钮添加到所有ViewController中。还不能添加图像(低重复)。1)2)3)感谢您的回复。我曾想过使用“展开”segue,但无法将其连接到iOS提供的后退按钮(隐式)。必须创建自定义按钮(带背面图标图像)用于特定的细节视图控制器,并将其连接到出口段。我将寻找其他方法,如果没有,我将遵循此方法。谢谢
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
   if segue.identifier == "My Unwind Segue" {
      if let myUnwindSegue = segue.destinationViewController as? MyCollectionViewController {
         // prepare for segue
      }
   }
}