tcu*_*rdt 6 cocoa-touch uistoryboard uistoryboardsegue ios6
简单的故事板设置:UIViewController与UINavigationController.在表格单元格上单击自定义segue将新的UIViewController推送到导航堆栈.都好.但是按下导航栏中的"后退"按钮,它只使用默认的流行动画.
弹出后,如何告诉导航控制器使用我的自定义segue?我已经添加
- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier
- (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender
Run Code Online (Sandbox Code Playgroud)
两个视图控制器,但它们根本没有被调用.
我错过了什么?
Tus*_*reb 11
您可以通过创建自定义转换而不是使用自定义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.
}
Run Code Online (Sandbox Code Playgroud)
仍然在第一个视图控制器中,例如在ViewDidLoad中,告诉navigationcontroller第一个视图控制器将充当其委托:
self.navigationController.delegate = self;
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的是,创建一个采用UIViewControllerAnimatedTransitioning协议的动画类.实现以下方法:
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
Run Code Online (Sandbox Code Playgroud)
和
- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext
Run Code Online (Sandbox Code Playgroud)
第一种方法保存转换代码.点按后退按钮时,将自动使用此转换代码.
这是一个非常简单的示例项目.