使用故事板非常简单。你只需将动作拖到“退出”。但是如何从代码中调用它呢?
当前回答
创建一个手动segue (ctrl-drag from File 's Owner to Exit), 选择它在左侧控制器菜单下面绿色退出按钮。
插入要unwind的Segue名称。
然后,- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender.与您的续集识别。
其他回答
Vishal Chaudhry的回答对我很有用。我还会添加,为了手动触发seque使用:
[self performSegueWithIdentifier:@"mySegueName" sender:self];
在ViewController中,你还必须在故事板中ViewController的场景下选择unwind segue,并在RHS的属性视图中确保标识符字段包含你在代码中引用的名称(在上面的例子中是“mySegueName”)。
如果省略此步骤,上面的行将抛出一个异常,表示序列名未知。
向后兼容的解决方案,将工作于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(动画:真)
它会弹出堆栈上的所有视图控制器回到你的根视图控制器。
要从导航堆栈中弹出最顶层的视图控制器,使用:
导航控制器?。会被(动画:真)
斯威夫特4:
1. 在你想unwind到的控制器中创建一个@IBAction segue:
@IBAction func unwindToVC(segue: UIStoryboardSegue) {
}
2. 在故事板中,从你想要segue (unwind)的控制器中,从ctrl+拖动从控制器符号到退出符号并选择你之前创建的方法:
3.现在你可以注意到在文档大纲中你有了新的标题为“Unwind segue....”的行。现在您应该单击这一行并打开属性检查器来设置标识符(在我的示例中是unwindSegueIdentifier)。
4. 你快完成了!现在你需要打开你想要unwind的视图控制器并创建一些执行segue的方法。例如,你可以添加按钮,用@IBAction的代码连接它,然后在IBAction中添加perfromSegue(withIdentifier:sender:)方法:
@IBAction func unwindToSomeVCWithSegue(_ sender: UIButton) {
performSegue(withIdentifier: "unwindSegueIdentifier", sender: nil)
}
这就是你要做的一切!
引用苹果关于Unwind Segue的技术说明: 要添加一个只会被编程触发的unwind segue,从场景的视图控制器图标control+拖动到它的退出图标,然后从弹出菜单中为新segue选择一个unwind动作。
技术说明链接
推荐文章
- 我如何在我的iOS应用程序中每n分钟得到一个后台位置更新?
- 如何使用iOS创建GUID/UUID
- 禁用所呈现视图控制器的交互式撤销
- 点击按钮时如何打开手机设置?
- 如何使用UIVisualEffectView来模糊图像?
- 如何修复UITableView分隔符在iOS 7?
- 故事板中的自定义单元格行高设置没有响应
- 在Swift中使用自定义消息抛出错误/异常的最简单方法?
- 如何在Swift中获得唯一的设备ID ?
- 复制文本到剪贴板与iOS
- 在Swift中根据字符串计算UILabel的大小
- 如何调用手势点击在UIView编程在迅速
- 我如何隐藏在一个Swift iOS应用程序的状态栏?
- 在iPad上使用iOS 8正确呈现UIAlertController
- 尝试将一个非属性列表对象设置为NSUserDefaults