我正在做一个项目,我正在调用几个 segue 而不是使用导航控制器。在我的项目的早期,我设置了一个模态转场,并从几个不同按钮的 IBAction 方法中调用它(我从不同的按钮调用相同的转场,因为我将一个字符串与转场一起传递)。
在我的故事板中,它看起来像这样:
然后在我的代码中,我这样做:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSLog(@"Vimeo Segue");
if([segue.identifier isEqualToString:@"playVimeo"]) {
WebViewViewController *controller = (WebViewViewController *)segue.destinationViewController;
controller.vimeoURL = vimeoURL;
}
}
- (IBAction)launchCreativeFuture:(id)sender {
vimeoURL = @"72053500";
[self performSegueWithIdentifier:@"playVimeo" sender:sender];
}
这行得通,我对此很满意。然而...
我偶然发现了另一种这样做的方式,我很困惑为什么它们都有效,以及推荐使用哪一种。
在这里,根据这些图片,我添加了一个链接的 IBAction 和一个模态 segue:
我的代码如下所示:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([segue.identifier isEqualToString:@"pushToGraduateCourses"]) {
NSLog(@"Grad Segue");
UIViewController *controller = (UIViewController *)segue.destinationViewController;
}
}
- (IBAction)launchGraduate:(id)sender {
NSLog(@"Grad Button");
[self performSegueWithIdentifier:@"pushToGraduateCourses" sender:sender];
}
据我所知,在代码方面几乎完全相同......除了当我这样做时,我会收到一个警告:“警告:在演示过程中尝试进行演示!” ...当我查看控制台时,“Grad Segue”被记录了两次......这是有道理的,但在我的第一个示例中,“Vimeo Segue”只记录了一次。
我想我要问的是几个问题:
a) 谁能发现这两种方法之间的区别?因为我做不到。
b)从Interface Builder创建一个segue是否会自动从按钮调用performSegueWithIdentifier,而不必从链接到该按钮的IBAction中以编程方式调用它?
c) 推荐哪种方式?
提前致谢,
〜杰西