如何防止先前segue的循环

时间:2014-07-17 14:53:47

标签: objective-c segue

我的问题很简单。我有一个故事板使用导航控制器和视图,让我们说view1,view2,view3和view4。它们之间的流动如下:

view1 --> view2 (push)
view2 --> view3 (push)
view3 --> view4 (push)
view4 --> view2 (push)

我想要做的是,当我在view2点击后退按钮时,我总是想去view1而不是view4。我应该遵循什么逻辑呢?

注意:不是它们是root视图。

2 个答案:

答案 0 :(得分:3)

为此你可以做两件事之一。

要么放松一下......

在ViewController1中添加一个类似...的方法

- (IBAction)unwindBackToHere:(UIStoryBoardSegue *)segue
{
    // do something
}

然后在故事板中拖动"完成"按钮到绿色"退出"在视图控制器下面的门,你应该看到你创建的方法。

这个新的" segue"将从ViewController4一直弹回ViewController1。

然后你可以用它来做其他事情,比如重新加载屏幕......

或者你可以回到它。

//in ViewController4
- (void)doneButtonPressed
{
    [self.navigationCongtroller popToViewController:viewController1 animated:YES];
}

这比较麻烦,因为这意味着首先要抓住视图控制器1。

答案 1 :(得分:0)

当你在view4上并想要推送view2时,不要使用segues并将一个viewControllers数组推送到UINavigationController,如下所示:

NSArray *viewControllers = @[view1, view2];
[self.navigationController setViewControllers:viewControllers animated:YES];

这将从堆栈中删除view4并具有您想要的层次结构。

另一个选项是用你自己的替换view2的后退按钮,并在其动作方法上使用以下内容:

[self.navigationController popToViewController:view1 animated:YES];