在XCode 4中调用segue的正确方法是什么?

时间:2013-08-31 22:52:30

标签: iphone ios uistoryboardsegue ibaction

我正在开发一个项目,我正在调用多个segues而不是使用导航控制器。 在我的项目早期,我设置了一个模态segue,并在几个不同按钮的IBAction方法中调用它(当我传递一个字符串和segue时,我从不同的按钮调用相同的segue)。

在我的故事板中,它看起来像这样:

UIButton with linked IBAction

Modal Segue with Custom Identifier

然后在我的代码中,我这样做:

-(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,根据这些图片:

linked IBAction

modal segue identifier

我的代码看起来像这样:

-(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

1 个答案:

答案 0 :(得分:2)

一个。是

B中。是的,当您从按钮创建segue时,按钮会调用performSegueWithIdentifier。

℃。在我看来,你应该尽可能多地在故事板中进行UI设计,如果你需要根据代码中的内容更新你的UI,那么只需去代码。防爆。如果用户是您应用中的管理员,则您需要转到不同于标准用户的设置页面。