ios6 - Unwind非常漂亮, 你怎么使用?

  显示原文与译文双语对照的内容

iOS 6和 Xcode 4.5有一个新特性称为"展开转移":

展开以后允许转换到 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

展开的工作方式及其可以使用的内容?

时间:

一言以蔽之

一个放松转话题 ( 有时称为退出 )的工作可用来向后导航通过推,情态动词。popover出现( 如同你从导航栏上弹出导航项目,关闭了popover或者关闭了有模式显示的视图控制器) 。 在你的导航层次结构,其中一个放松action,最重要的是你可以真正地放松通过不只有一个,而是一系列的工作 push/modal/popover 出现,比如 学要"返回"多个步骤

当你执行展开转换时,你需要指定一个动作,该动作是你要展开的视图控制器的动作方法。

objective-c:


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


@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}

在 Storyboard 中创建展开转移时使用这里动作方法的名称。 此外,在执行展开转移之前调用这里方法。 你可以从传递的UIStoryboardSegue 参数中获取源视图控制器,以与启动转移的视图控制器交互( 例如。 获取模式视图控制器的属性值的步骤。 在这方面,该方法与 prepareForSegue: 方法的方法有相似的函数。

iOS 8的工作更新: 放松出现的工作也能与网路作业系统 8自适应的出现,如显示和显示细节。

一个示例

让我们拥有一个带有导航控制器和三个子视图控制器的Storyboard:

enter image description here

从绿色视图控制器可以将( 后退导航) 展开为红色视图控制器。 从蓝色,你可以从绿色或者红色到绿色。 要启用展开,你必须将特殊动作方法添加到红色和绿色,比如 是红色的动作方法:

objective-c:


@implementation RedViewController

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

@end


@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}

在添加动作方法之后,你可以在 Storyboard 中通过control-dragging来定义展开转移到退出 icon 。 当按钮按下时,我们想从绿色中释放到红色:

enter image description here

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

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


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

展开也可以通过 push/modal的组合进行。 比如 如果我添加了另一个带有模式转移的黄色视图控制器,我们可以在一个步骤中从黄色一路切换到红色:

enter image description here

从代码展开

当你定义一个由control-dragging到视图控制器的退出符号的展开时,文档大纲中将出现一个新的连接:

enter image description here

选择segue转到Attributes和going属性Inspector检查器将显示"标识符"属性。 使用这里选项可以为你的连接提供唯一的标识符:

enter image description here

这样,就可以像其他任何连接一样从代码中进行展开传递:

objective-c:


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


performSegueWithIdentifier("UnwindToRedSegueID", sender: self)

至于如何在 Storyboard 中使用展开。。

步骤 1 )

你需要的最低限度是将目标视图( aka,即先前在导航中弹出的视图,你希望对它的进行展开)的视图控制器子类化并添加一个类似于. h 文件( 方法名可以是任何你想要的,但它应该是唯一的,因为所有的展开都在你的整个应用中列出)的方法:

objective-c


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

雨燕


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

步骤 2 )

现在,在你的源代码视图( 要从中展开的视图) 中,你只需从按钮拖动一个连接,或者从源视图底部的小绿色"退出"icon 拖放。 现在应该有一个选项可以连接到"- unwindToViewControllerNameHere"

就是这样,当你的按钮被点击时,你的连接将会松开。

工作放松出现是用来"返回"来一些视图控制器的工作,通过大量的从其中出现,你获取到"当前"视图控制器。

假设你有一个 MyNavController,它有 A 作为它的根视图控制器。 现在你使用了push转到 B 。 现在导航控制器在它的viewControllers 数组中有一个和,而是可见的。 现在你有模式地呈现 C

展开后,你现在可以将"背面"从 C 展开到 B ( 例如 。 取消模式显示的视图控制器,基本上是"撤消"模式转移。 你甚至可以返回到根视图控制器 A,撤销模式转移和强制转移。

展开后使它的易于回溯。 例如在网路作业系统 6之前,最好的做法是为了为消除模式呈现视图控制器的委托将呈现视图控制器设置为所建立的视图控制器,然后调用你的自定义的代理方法,该方法然后不接受该 presentedViewController 。 声音笨重复杂它是。 这就是为什么现在展开的原因很好。

Swift iOS:

步骤 1: 将这里方法定义到主控制器视图中。 你想要返回的位置:


//pragma mark - Unwind Seques
@IBAction func goToSideMenu(segue: UIStoryboardSegue) {

 println("Called goToSideMenu: unwind action")

}

步 2: ( Storyboard ) 右键单击你从站/子退出按钮并选择"gotosidemenu"作为操作帮你接通按钮你会单击以将结果返回给你主控制器视图其上,那

enter image description here 步骤 3: 构建和运行。。

...