当前位置: 首页 > 知识库问答 >
问题:

什么是放松段,你如何使用它们?

拓拔浩阔
2023-03-14

iOS 6和Xcode 4.5有一项新功能,称为“Unwind Segue”:

展开分段可以允许转换到故事板中的现有场景实例

除了Xcode 4.5发行说明中的这一简短条目外,UIViewController现在似乎有两个新方法:

- (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender
- (UIViewController *)viewControllerForUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender
- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier

展开段如何工作以及它们可以用于什么?

共有3个答案

金嘉言
2023-03-14

展开segue用于“返回”到一些视图控制器,从那里,通过一些segue,您可以到达“当前”视图控制器。

假设您有一个MyNavController,其中A作为其根视图控制器。现在,您可以使用推segue到B。现在导航控制器在其viewController数组中有A和B,并且B可见。现在,您将模块化地呈现C

使用展开段,您现在可以从C展开“后退”到B(即,解除模态显示视图控制器),基本上“撤消”模态段。您甚至可以一直放回到根视图控制器A,撤消模式序列和推送序列。

松开segue使它很容易回溯。例如,在iOS6之前,取消呈现视图控制器的最佳实践是将呈现视图控制器设置为呈现视图控制器的委托,然后调用自定义委托方法,然后该方法将取消呈现视图控制器。听起来笨重复杂?是的。这就是为什么放松赛格很好。

戚升
2023-03-14

至于如何在情节提要中使用展开分段。。。

步骤1)

转到要展开到的视图控制器的代码,并添加以下内容:

目标-C

- (IBAction)unwindToViewControllerNameHere:(UIStoryboardSegue *)segue {
    //nothing goes here
}

请确保在Obj-C中的.h文件中声明此方法

敏捷的

@IBAction func unwindToViewControllerNameHere(segue: UIStoryboardSegue) {
    //nothing goes here
}

步骤2)

在情节提要中,转到要从中展开的视图,只需从按钮或其他位置拖动一段,直到源代码视图右上角的小橙色“退出”图标。

现在应该有一个选项可以连接到“-unwindToViewControllerNameHere”

就是这样,当你的按钮被点击时,你的音乐就会放松。

南门向荣
2023-03-14

展开序列(有时称为退出序列)可用于通过推送、模式或popover序列向后导航(就像您从导航栏弹出导航项、关闭popover或解除模式显示的视图控制器)。除此之外,您实际上不仅可以通过一个,还可以通过一系列推送/模式/popover序列来展开,例如,在导航层次结构中通过单个展开操作“返回”多个步骤。

执行展开序列时,需要指定一个动作,这是要展开到的视图控制器的动作方法。

目标C:

- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}

迅速:

@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}

在情节提要中创建展开序列时,将使用此操作方法的名称。此外,在执行展开序列之前调用此方法。您可以从传递的UIStoryboardSegue参数获取源视图控制器,以与启动segue的视图控制器交互(例如,获取模态视图控制器的属性值)。在这方面,该方法具有与UIViewControllerprepareforsgue:方法类似的功能

iOS8更新:展开segue也适用于iOS8的自适应segue,如Show和Show Detail。

让我们有一个带有导航控制器和三个子视图控制器的故事板:

从绿色视图控制器,您可以展开(导航回)到红色视图控制器。从蓝色到绿色或通过绿色到红色。要启用展开,必须将特殊操作方法添加到红色和绿色,例如,以下是红色的操作方法:

目标C:

@implementation RedViewController

- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}

@end

迅速:

@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}

添加操作方法后,您可以通过控制拖动到退出图标来定义故事板中的展开segue。在这里,当按下按钮时,我们想从绿色展开到红色:

您必须选择要展开的视图控制器中定义的操作:

您也可以从蓝色展开到红色(在导航堆栈中“两步之遥”)。关键是选择正确的展开动作。

在执行展开序列之前,调用action方法。在这个例子中,我定义了一个从绿色和蓝色到红色的展开序列。我们可以通过UIStoryboardSegue参数访问action方法中的展开源:

目标C:

- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
    UIViewController* sourceViewController = unwindSegue.sourceViewController;

    if ([sourceViewController isKindOfClass:[BlueViewController class]])
    {
        NSLog(@"Coming from BLUE!");
    }
    else if ([sourceViewController isKindOfClass:[GreenViewController class]])
    {
        NSLog(@"Coming from GREEN!");
    }
}

迅速:

@IBAction func unwindToRed(unwindSegue: UIStoryboardSegue) {
    if let blueViewController = unwindSegue.sourceViewController as? BlueViewController {
        println("Coming from BLUE")
    }
    else if let redViewController = unwindSegue.sourceViewController as? RedViewController {
        println("Coming from RED")
    }
}

退绕也可通过推送/模式分段组合工作。例如,如果我添加了另一个带有模式序列的黄色视图控制器,我们可以在一个步骤中从黄色一直退到红色:

当您通过控件将某物拖动到视图控制器的退出符号来定义展开segue时,文档大纲中会出现一个新的segue:

选择segue并转到属性检查器会显示“标识符”属性。使用此选项为您的segue提供唯一标识符:

在此之后,展开segue可以像任何其他segue一样从代码中执行:

目标C:

[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];

迅速:

performSegueWithIdentifier("UnwindToRedSegueID", sender: self)
 类似资料:
  • 问题内容: 我一直在听到所有添加到JVM的新功能,这些功能之一是invokedynamic。我想知道它是什么,它如何使Java中的反射式编程更容易或更好? 问题答案: 这是一条新的JVM指令,它允许编译器生成代码,该代码以比以前更宽松的规范来调用方法-如果您知道“ 鸭子类型 ”是什么,invokedynamic基本上允许进行鸭子类型。作为Java程序员,您可以做的事情太多了。但是,如果您是工具创建

  • 问题内容: 有什么用? 请通过代码示例说明如何在JavaScript中使用它。 问题答案: 它不是jQuery功能,而是用于调试的功能。例如,您可以在发生某些情况时将某些内容记录到控制台。例如: 然后你会看到在Firebug的“控制台”选项卡(或其他工具的控制台- 例如Chrome的Web检查)时,您需要点击按钮。 由于某些原因,控制台对象可能不可用。然后,您可以检查它是否有用-这很有用,因为在部

  • 我所知道的关于排字的只是它们以某种方式取代了舱单。互联网上的信息很少,不能给我提供一个很好的主题意识。 因此,如果有人分享一些关于排字的有用材料的链接,包括示例和流行的用例,我会很高兴的。也欢迎详细的解答和解释。

  • 我得到以下错误: 它可能是另一种类型,而不是,但基本上模式是 所以 什么是未来 如何获得我想要的实际值 当我只有一个

  • 我很好奇AngularJS中的装饰师到底是什么。除了AngularJS文档中的一个简介和youtube视频中的一个简短(尽管很有趣)提及之外,对于装饰师来说,网上没有太多信息。 正如棱角分明的人所说,装饰师是: 服务的装饰,允许装饰者拦截服务实例的创建。返回的实例可以是原始实例,也可以是委托给原始实例的新实例。 我真的不知道这意味着什么,我也不知道你为什么要把这个逻辑从服务本身中分离出来。例如,如

  • 本文向大家介绍什么是幂等性?它是如何使用的?相关面试题,主要包含被问及什么是幂等性?它是如何使用的?时的应答技巧和注意事项,需要的朋友参考一下 幂等性指的是这样一种场景:您重复执行一项任务,但最终结果保持不变或类似。 幂等性主要用作数据源或远程服务,当它接收一组以上指令时,它只处理一组指令。