【问题标题】:How can I pass extra parameters to a custom segue?如何将额外的参数传递给自定义 segue?
【发布时间】:2012-04-19 08:48:47
【问题描述】:

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

【问题讨论】:

    标签: ios xcode segue


    【解决方案1】:

    您可以通过实现该方法来访问已触发自定义 segue 的 View:

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

    ...在您的视图控制器上。

    在该方法中,如果您使用 Interface Builder 链接它,则 sender 的值将是触发 segue 的视图。实现该方法时,建议通过以下方式查询触发了什么segue:

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

    ...其中“segueid”将是您在 Interface Builder 中为您的 segue 提供的标识符。

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

    假设您的自定义 segue 有一个名为 animationStyle

    的属性

    如果是perform方法,可以有如下:

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

    然后,假设您有几个 View Controller 想要在其中使用该自定义 segue。在第一个中,您可以实现 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,但据我所知,没有办法解决。

    【讨论】:

    • 当自定义 segue 特定于某些视图控制器时,这很好,但它不允许我创建可重用的自定义 segue,例如执行自定义动画,并从 IB 配置其参数。
    • 我不确定我是否理解您的担忧。我知道我在故事板的不同点重用自定义转场。我唯一需要注意的是在每个要使用它的 View Controller 上实现“prepareForSegue”方法,然后将所需的参数分配给那里的 segue。当然,你可以从不同的 View Controller 传递不同的参数来得到想要的结果。
    猜你喜欢
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    相关资源
    最近更新 更多