在自定义推送继续之后保留SourceViewController
我有一个自定义的UIStoryboardSegue
叫leftToRightSegue
。 每当这个segue被触发,我回到源视图, sourceViewController
的viewdidload
方法被调用。 这不是我想要的,因为设置非常重。
这是我用于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一下,有更好的模式。 这是一个快速和肮脏的方式来得到它的工作。
另外请记住,你将保持记忆的东西,而不是直接可见的用户。