自定义推送segue后保留SourceViewController

时间:2015-01-09 09:15:34

标签: ios objective-c uistoryboardsegue

我有一个名为UIStoryboardSegue的自定义leftToRightSegue。每次触发此segue并返回源视图时,都会调用viewdidload的{​​{1}}方法。这不是我想要的,因为设置很重。

这是我用于segue的代码:

sourceViewController

对于任何有兴趣的人来说,我实际上正在回顾这个观点:

#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];

}

如何保留sourceViewController?

1 个答案:

答案 0 :(得分:0)

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

@property (nonatomic, strong) BOOL *isInitialised;



- (void) viewDidLoad
{
    if (!self.isInitialised) 
    {
       ...
       self.isInitialised = YES;
    }
}

一旦执行了viewDidLoad中的操作,就将其设置为true。如果你搜索一下,有更好的模式。这是让它运行起来的一种快速而肮脏的方式。

另请注意,您将保留内存中的内容,而不是用户直接看到的内容。