0

我正在做一个项目,我正在调用几个 segue 而不是使用导航控制器。在我的项目的早期,我设置了一个模态转场,并从几个不同按钮的 IBAction 方法中调用它(我从不同的按钮调用相同的转场,因为我将一个字符串与转场一起传递)。

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

带有链接 IBAction 的 UIButton

带有自定义标识符的模态序列

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

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

链接的 IBAction

模态序列标识符

我的代码如下所示:

-(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) 推荐哪种方式?

提前致谢,

〜杰西

4

1 回答 1

2

A. 是的

B. 是的,当您从按钮创建转场时,按钮会调用 performSegueWithIdentifier。

C. 在我看来,你应该尽可能多地在 storyboard 中做 UI 设计,只有当你需要根据代码中的某些内容更新你的 UI 时才去代码。前任。如果用户是您应用程序的管理员,您将希望转到与标准用户不同的设置页面。

于 2013-08-31T23:09:54.343 回答