使用故事板非常简单。你只需将动作拖到“退出”。但是如何从代码中调用它呢?


当前回答

Bradleygriffith的回答很好。为了简化,我采取了第10步,并做了一个截图。这是Xcode 6的截图。

从橙色图标控制拖动到红色Exit图标,在视图中创建一个没有任何操作/按钮的展开。

然后在侧边栏中选择unwind segue:

设置Segue标识符字符串:

从代码中访问该标识符:

[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];

其他回答

Vishal Chaudhry的回答对我很有用。我还会添加,为了手动触发seque使用:

[self performSegueWithIdentifier:@"mySegueName" sender:self];

在ViewController中,你还必须在故事板中ViewController的场景下选择unwind segue,并在RHS的属性视图中确保标识符字段包含你在代码中引用的名称(在上面的例子中是“mySegueName”)。

如果省略此步骤,上面的行将抛出一个异常,表示序列名未知。

Bradleygriffith的回答很好。为了简化,我采取了第10步,并做了一个截图。这是Xcode 6的截图。

从橙色图标控制拖动到红色Exit图标,在视图中创建一个没有任何操作/按钮的展开。

然后在侧边栏中选择unwind segue:

设置Segue标识符字符串:

从代码中访问该标识符:

[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];

向后兼容的解决方案,将工作于ios6之前的版本,为那些感兴趣:

- (void)unwindToViewControllerOfClass:(Class)vcClass animated:(BOOL)animated {

    for (int i=self.navigationController.viewControllers.count - 1; i >= 0; i--) {
        UIViewController *vc = [self.navigationController.viewControllers objectAtIndex:i];
        if ([vc isKindOfClass:vcClass]) {
            [self.navigationController popToViewController:vc animated:animated];
            return;
        }
    }
}

Swift 4.2, Xcode 10+

对于那些不知道如何通过故事板建立风险投资的人(那些从搜索“程序化”+“unwind segue”中得到这个问题的人)。

鉴于你不能通过编程方式设置unwind segue,最简单的纯编程解决方案是调用:

导航控制器?。popToRootViewController(动画:真)

它会弹出堆栈上的所有视图控制器回到你的根视图控制器。


要从导航堆栈中弹出最顶层的视图控制器,使用:

导航控制器?。会被(动画:真)

引用苹果关于Unwind Segue的技术说明: 要添加一个只会被编程触发的unwind segue,从场景的视图控制器图标control+拖动到它的退出图标,然后从弹出菜单中为新segue选择一个unwind动作。

技术说明链接