我同意与其他类型的 segues 相比,缺乏关于 unwind segues 的文档,但是在您掌握了它们之后,它们非常简单。我的理解是,segues(包括 unwind segues)是 Apple 希望您在视图控制器之间转换的方式。即使您创建了自定义转场,常规的展开转场仍应起作用。
在我自己的工作中,我将 UIStoryboardSegue 子类化为在 segue 之间转换时执行自定义动画。以一个广为人知的应用程序为例,当你点击优步应用程序中的菜单按钮时,地图视图控制器会向下移动,并出现一个表格视图控制器。当您点击表格中的一行时,新的视图控制器会从右侧滑入,但地图视图控制器仍然在屏幕上可见。当您点击地图视图控制器时,它会返回到其原始位置。出于某种原因,我相信 Uber 实际上根本没有实现 segue,只是将视图控制器放在视图控制器之上,但我在自己的应用程序中使用自定义 segue 实现了类似的东西。这些 segues 很难用 Apple 的默认 segues 复制,所以我使用了自定义的。
如果您将展开 segue 绑定到后退按钮,那么您将需要覆盖 uinavigationcontroller 中默认后退按钮附带的正常展开。我发现定制那个segue非常困难。我建议隐藏uinavigationcontroller 附带的默认后退按钮,添加您自己的条形按钮,并将这个新按钮绑定到展开segue。我知道这很烦人,考虑到默认的后退按钮有一些附加功能,例如当标题足够短时使用前一个视图控制器中的标题作为其文本。不幸的是,我认为 Apple 真的想阻止您自定义默认按钮,并使其难以更改。我已经忽略了如何用自定义按钮替换默认的后退按钮,所以如果您遇到问题,请告诉我。
无论如何,要创建展开转场,您必须首先在您正在展开到(而不是从)的uiviewcontroller 的类(或父类)中创建一个方法。
- (IBAction) methodName:(UIStoryboardSegue *)segueName
您可以将methodName 和segueName 更改为您喜欢的任何值。现在转到您的故事板,并转到包含您正在从展开的uiviewcontroller 的场景。如果您现在 ctrl 从这个 uiviewcontroller(控制器顶部栏左侧的黄色按钮)拖动到退出按钮(同一栏右侧的橙色按钮),您现在将看到一个弹出菜单up 包含上面的methodName。单击该方法,现在将创建您的 unwind segue。
创建展开转场后,您现在可以在情节提要左侧的大纲中看到它。如果你点击 segue,你可以检查它并给它一个标识符。
现在处理将其绑定到后退按钮...
同样,查看uiviewcontroller 您正在展开 从 ,如果您控制从情节提要中的自定义后退按钮(不是默认后退按钮)拖动到此uiviewcontroller 的类,将为您创建一个与按钮绑定的 IBAction。在这个方法中,添加:
[self performSegueWithIdentifier: segueIdentifier sender:nil];
其中segueIdentifer是您在上面提供的展开转场的标识符。现在,当您点击后退按钮时,将执行展开转场。您还可以在执行 unwind segue 之前做一些动画或不做的事情。
我实际上已经完成了一些复杂的自定义展开segues 来处理源视图控制器和目标视图控制器的动画。如果您可以更具体地说明您希望展开的外观,我可以尝试帮助您。