我正在开发一个项目,我正在调用多个segues而不是使用导航控制器。 在我的项目早期,我设置了一个模态segue,并在几个不同按钮的IBAction方法中调用它(当我传递一个字符串和segue时,我从不同的按钮调用相同的segue)。
在我的故事板中,它看起来像这样:
然后在我的代码中,我这样做:
-(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)推荐哪种方式?
提前致谢,
~Jesse
答案 0 :(得分:2)
一个。是
B中。是的,当您从按钮创建segue时,按钮会调用performSegueWithIdentifier。
℃。在我看来,你应该尽可能多地在故事板中进行UI设计,如果你需要根据代码中的内容更新你的UI,那么只需去代码。防爆。如果用户是您应用中的管理员,则您需要转到不同于标准用户的设置页面。