gpt4 book ai didi

ios - 什么是 Unwind segues 以及如何使用它们?

转载 作者:IT王子 更新时间:2023-10-29 07:24:22 31 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

unwind segues 是如何工作的以及它们的用途是什么?

最佳答案

简而言之

unwind segue(有时称为exit segue)可用于通过推送、模态或弹出式 segues 返回导航(就像您从导航中弹出导航项一样条,关闭弹出窗口或关闭模态呈现的 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 更新:Unwind 转场也适用于 iOS 8 的自适应转场,例如ShowShow Detail

一个例子

让我们有一个带有导航 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) {
}

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

enter image description here

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

enter image description here

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

在执行 unwind segue 之前,调用 action 方法。在示例中,我定义了从绿色和蓝色到红色的展开转场。我们可以通过 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")
}
}

Unwinding 也可以通过 push/modal segues 的组合来工作。例如。如果我添加另一个带有模态转场的 Yellow View Controller ,我们可以一步从 Yellow 返回到 Red:

enter image description here

从代码中解脱

当您通过控制拖动某些东西到 View Controller 的退出符号来定义展开转场时,文档大纲中会出现一个新的转场:

enter image description here

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

enter image description here

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

objective-c :

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

swift :

performSegueWithIdentifier("UnwindToRedSegueID", sender: self)

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

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