如何将额外的参数传递给自定义的segue?

问题描述:

我一直在玩iOS的自定义细节,并试图尽可能地使用它们,以使应用程序的完整工作流在我的故事板中可视化。当我创建一个popover segue时,它知道触发segue的视图(它必须为了定位popover),但是当我创建一个自定义的segue时,我找不到一种方法来做同样的事情。有没有一种方法可以访问在自定义细节中启动segue的视图?另外,是否有一种方法可以将自定义参数从Interface Builder传递给segue,就像可以将运行时参数传递给视图控制器一样?在你的视图控制器如何将额外的参数传递给自定义的segue?

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

...:

您可以访问已通过实现方法触发自定义SEGUE观。

在该方法上,如果使用Interface Builder将其链接,则发件人的值将是触发segue的视图。实现此方法时,建议您要查询的赛格瑞已经通过以下方式被触发:

if ([[segue identifier] isEqualToString:@"segueid"]) 

...其中“segueid”将是你所赐给在Interface Builder您SEGUE标识符。

关于第二个问题,我不知道在Interface Builder中为segue指定参数的方法,但是您可以使用相同的“prepareForSegue”方法在运行时将它们从View Controller中传递。

想象一下,您的自定义赛格瑞有一个名为animationStyle财产

如果执行方法,你可以有以下几种:

- (void)perform 
{ 
    switch (self.animationStyle) { 
     case 0: 
      // TODO Perform animation type 0 
     case 1: 
      // TODO Perform animation type 1 
    } 
} 

然后,让我们说你有几个视图控制器,你想使用该自定义赛格。在第一个可以实现performSegue方法,如:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"yourCustomSegueID"]) { 
     ((YourCustomSegueClass *)segue).animationStyle = 0; 
    } 
} 

虽然在第二视图控制器就可以实现它想:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"yourCustomSegueID"]) { 
     ((YourCustomSegueClass *)segue).animationStyle = 1; 
    } 
} 

...那么有效,要重复使用相同的自定义为了得到不同的效果而使用segue类。 IB不会让你直接配置segue,但据我所知,这是没有办法的。

+0

这很好,当自定义segue特定于某个视图控制器时,但它不允许我创建可重复使用的自定义segue,例如执行自定义动画并从IB配置其参数。 – SoftMemes 2012-05-04 08:36:16

+0

我不确定我是否理解你的问题。我知道我在故事板的不同点重复使用自定义的细节。我需要关注的唯一事情就是在每个要使用它的View Controller上实现“prepareForSegue”方法,然后将所需的参数分配给那里的segue。当然,您可以通过不同的视图控制器传递不同的参数来获得所需的结果。 – flainez 2012-05-04 09:12:17