我的问题是,如何让以下自定义展开转场在 iOS 9 之前版本的设备以及运行 iOS 9 的设备上工作?
我有一个显示视图控制器的自定义 Segue,然后有一个相应的自定义展开 Segue。此代码在 iOS 8 中运行良好,通过创建 UIStoryboardSegue 的子类并实现该perform
方法来实现。然后我在我的自定义导航控制器中覆盖以下方法:
- (UIStoryboardSegue *) segueForUnwindingToViewController: (UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier
{
UIStoryboardSegue *segue;
if([fromViewController isKindOfClass:[MyViewController class]]){
segue = [[CustomSegue alloc] initWithIdentifier:identifier source:fromViewController destination:toViewController]; //Custom Unwind Segue
}
else{
UIStoryboardSegue *unwindSegue = [super segueForUnwindingToViewController:toViewController fromViewController:fromViewController identifier:identifier]; //Normal Unwind Segue
segue = unwindSegue;
}
return segue;
}
在 iOS 9 中,segueForUnwindingToViewController
已弃用。它仍然适用于 MyViewController CustomSegue;但是,默认展开转场不再适用于任何其他展开转场。尽管在 super 上调用该方法会返回一个 unwind segue,但 segue 永远不会发生,视图控制器永远不会弹出,并且用户永远无法返回上一个屏幕。所以要明确一点,如果我使用常规的 show segue,则相应的 unwind segue 会调用已弃用的方法,该方法会调用 super 上的方法,并且不起作用。
我观看了故事板上的 WWDC 演讲,我能够通过以下方式在 iOS 9 中解决此问题:a)不再在我的自定义导航控制器中覆盖此方法,b)进入故事板,单击自定义 segue,然后输入CustomSegue
作为 Segue 类。不幸的是,由于我的目标是 iOS 7,我收到警告“只有自定义 segues 支持 iOS 9 之前的类名”,并且自定义展开 segue 现在不适用于 iOS 7 或 iOS 8!