2014-12-04 51 views
1

我只是想創建自定義的segue,所以我寫下面的代碼。該代碼似乎罰款,但是當我運行這段代碼是給下面的錯誤:故事板:'UIStoryboardSegue的子類必須重寫 - 執行。'

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Subclasses of UIStoryboardSegue must override -perform.'

下面是代碼:

#import "ViewController.h" 
#import "Temp-2.h" 
@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
[super viewDidLoad]; 

Temp_2 *toViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Temp2"]; 
segue1=[[UIStoryboardSegue alloc] initWithIdentifier:@"temp" source:self destination:toViewController]; 
// Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning { 
[super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
} 

- (IBAction)actionPush:(id)sender { 

[self prepareForSegue:segue1 sender:sender]; 
[segue1 perform]; 
} 


-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
if ([segue1.identifier isEqualToString:@"temp"]) 
{ 
    [segue1.destinationViewController setStr:@"string passed"]; 

} 
} 
@end 

任何一個請幫助我,這有什麼不對這個代碼。

回答

2

我找到了解決方案。爲了像上面那樣創建自定義的segue,我們需要繼承UIStoryBoardSegue類並覆蓋方法執行。以下是我已實施的代碼。

#import "MyCustomSegue.h" 

@implementation MyCustomSegue 
- (void)perform 
{ 
UIViewController *source = self.sourceViewController; 
UIViewController *destination = self.destinationViewController; 

UIWindow *window = source.view.window; 

CATransition *transition = [CATransition animation]; 
[transition setDuration:1.0]; 
[transition setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
[transition setType:kCATransitionPush]; 
[transition setSubtype:kCATransitionFromRight]; 
[transition setFillMode:kCAFillModeForwards]; 
[transition setRemovedOnCompletion:YES]; 


[window.layer addAnimation:transition forKey:kCATransition]; 
[window setRootViewController:destination]; 
} 

此代碼將創建Push類型動畫並解決上述錯誤。