简单的故事板设置:使用的UIViewController UINavigationController的。 在一个表格单元格单击自定义赛格瑞将一个新的UIViewController到导航堆栈。 都好。 但随后在导航栏中按下“返回”按钮,它仅使用默认弹出动画。
如何弹出回来时,我告诉导航控制器使用个性化的SEGUE? 我已经添加
- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier
- (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender
这两个视图控制器,但它们不会被调用。
我在想什么?
您可以通过创建一个自定义的过渡,而不是使用自定义SEGUE做到这一点。 我花了一段时间来理解,但它基本上是很简单的。 只要确保你的第一个视图控制器采用UINavigationControllerDelegate协议。 然后,仍然在第一视图中的控制器,实现下面的方法:
- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
animationControllerForOperation:(UINavigationControllerOperation)operation
fromViewController:(UIViewController *)fromVC
toViewController:(UIViewController *)toVC
{
return X // where X is an animation Controller object, an instance of the animator class.
}
仍然在第一视图中的控制器,例如在viewDidLoad中,告诉第一视图控制器将作为其代表作用在navigationcontroller:
self.navigationController.delegate = self;
最后但并非最不重要的,创建一个采用UIViewControllerAnimatedTransitioning协议的动画类。 实现以下方法:
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
和
- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext
第一种方法保持过渡代码。 后退按钮挖掘时,此过渡代码将自动使用。
这里是一个非常简单的示例项目 。
您是否尝试过使用类似:
- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier
{
return [MyCustomSegueInitMethod viewControllerA:vc1 viewControllerB: vcB];
}
我从来没有一个定制SEGUE,但假设他们所有其他人一样正常工作,你重写他们的时候,只要您的自定义赛格瑞类继承的UIStoryBoardSegue,它应该工作...
然后确保您已连结后退按钮“退出”图标,在视图控制器下面的吧。
放松塞格斯是有用的“回滚”塞格斯,包括自定义塞格斯。 在你的用例的问题不在于塞格斯本身,而是要触发从后退按钮开卷SEGUE的事实。
这就是说,你可以尝试通过不使用平仓来解决这个问题,但引发自定义赛格瑞当标准后退按钮被点击:
// MyDetailViewController.m:
- (void)viewWillDisappear:(BOOL)animated
{
if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) {
// trigger custom segue (but note that the sourceViewController
// has already been removed from the nav controller)
}
[super viewWillDisappear:animated];
}
显然,这不再有什么关系平仓 - 它只是在执行您实现为“回滚”你用来摆在首位“推”的详细视图控制器SEGUE定制SEGUE。
让我懂得这正好。