gpt4 book ai didi

ios - Unwind segue 的用途是什么以及如何使用它们?

转载 作者:行者123 更新时间:2023-11-30 10:27:19 27 4
gpt4 key购买 nike

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

Unwind segues can allow transitioning to existing instances of scenes in a storyboard

除了 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

展开转场如何工作以及它们的用途是什么?

最佳答案

简而言之

展开转场(有时称为退出转场)可用于通过推送、模态或弹出转场向后导航(就像您从导航中弹出导航项一样)栏,关闭弹出窗口或关闭模态呈现的 View Controller )。最重要的是,您实际上不仅可以通过一个,还可以通过一系列推送/模态/弹出框来放松,例如使用单个展开操作“返回”导航层次结构中的多个步骤。

当你执行unwind segue时,你需要指定一个action,它是你想要unwind到的 View Controller 的action方法。

Objective-C:

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

swift :

@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}

当您在 Storyboard中创建展开转场时,将使用此操作方法的名称。此外,在执行展开转场之前调用此方法。您可以从传递的 UIStoryboardSegue 参数中获取源 View Controller ,以与启动 segue 的 View Controller 进行交互(例如,获取模态视图 Controller 的属性值)。在这方面,该方法与 UIViewControllerprepareForSegue: 方法具有类似的功能。

iOS 8 更新:展开转场也可与 iOS 8 的自适应转场配合使用,例如显示显示详细信息

示例

让我们有一个带有导航 Controller 和三个 subview Controller 的 Storyboard:

enter image description here

从绿色 View Controller 中,您可以展开(导航回)到红色 View Controller 。您可以从蓝色放松到绿色,或者通过绿色放松到红色。要启用展开,您必须向红色和绿色添加特殊操作方法,例如这是红色的操作方法:

Objective-C:

@implementation RedViewController

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

@end

swift :

@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}

添加操作方法后,您可以通过按住 Control 键拖动到“退出”图标来定义 Storyboard 中的展开转场。在这里,我们希望在按下按钮时从绿色变为红色:

enter image description here

您必须选择要展开到的 View Controller 中定义的操作:

enter image description here

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

在执行展开转场之前,会调用操作方法。在示例中,我定义了从绿色和蓝色到红色的展开转场。我们可以通过 UIStoryboardSegue 参数访问操作方法中展开的源:

Objective-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!");
}
}

swift :

@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")
}
}

展开也可以通过推送/模态转场的组合来进行。例如。如果我添加另一个带有模态转场的黄色 View Controller ,我们可以一步从黄色一直回到红色:

enter image description here

从代码中解压

当您通过按住 Control 键并将某些内容拖动到 View Controller 的退出符号来定义展开 Segue 时,文档大纲中会出现一个新的 Segue:

enter image description here

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

enter image description here

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

Objective-C:

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

swift :

performSegueWithIdentifier("UnwindToRedSegueID", sender: self)

关于ios - Unwind segue 的用途是什么以及如何使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59891551/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com