在自定义推送继续之后保留SourceViewController

我有一个自定义的UIStoryboardSegueleftToRightSegue 。 每当这个segue被触发,我回到源视图, sourceViewControllerviewdidload方法被调用。 这不是我想要的,因为设置非常重。

这是我用于segue的代码:

 #import "LeftToRightPushSegue.h" #import "QuartzCore/QuartzCore.h" @implementation LeftToRightPushSegue -(void)perform { UIViewController *sourceViewController = (UIViewController*)[self sourceViewController]; UIViewController *destinationController = (UIViewController*)[self destinationViewController]; CATransition* transition = [CATransition animation]; transition.duration = .25; transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; transition.type = kCATransitionPush; transition.subtype = kCATransitionFromLeft; [sourceViewController.navigationController.view.layer addAnimation:transition forKey:kCATransition]; [sourceViewController.navigationController pushViewController:destinationController animated:NO]; } 

事实上,对于任何感兴趣的人来说,

 UIViewController *sourceViewController = (UIViewController*)[self sourceViewController]; CATransition* transition = [CATransition animation]; transition.duration = .25; transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; transition.type = kCATransitionPush; transition.subtype = kCATransitionFromRight; [sourceViewController.navigationController.view.layer addAnimation:transition forKey:kCATransition]; [sourceViewController.navigationController popViewControllerAnimated:NO]; 

我如何保留sourceViewController?

如果可能,我会尝试将代码移动到init方法。 如果这是不可能的,也许创build一个布尔属性。 即

 @property (nonatomic, strong) BOOL *isInitialised; - (void) viewDidLoad { if (!self.isInitialised) { ... self.isInitialised = YES; } } 

一旦viewDidLoad中的操作执行完毕,就将其设置为true。 如果你search一下,有更好的模式。 这是一个快速和肮脏的方式来得到它的工作。

另外请记住,你将保持记忆的东西,而不是直接可见的用户。