使用storyboard开发的时候,经常会在一个scene上添加一个button,再拖拽这个button到某个想要关联的页面,最后选择push的方式跳转。这样scene_A和scene_B就有了一个“顺序”的跳转方式了。但有时,希望可以从scene_B触发某个action,跳转回scene_A。如果还采用刚才的方式,就会有问题。因为,跳回的那个scene_a已经不是原来的那个scene_A了。这就需要使用到storyboard的unwind segue了。写个demo小总结一下:

创建如下图所示的storyboard。 RedViewController push到 YellowViewController, YellowViewController push到BlueViewController, BlueViewController modal到 GreenViewController。从YellowViewController可以返回RedViewController,从BlueViewController可以返回YellowViewController和RedViewController。当然,从GreenViewController也是可以返回到BlueViewController的。

回到代码部分。因为使用了storyboard,push、model的跳转都省去了写代码,同理,“返回”的跳转也是省去了代码的。

RedViewController.m中

- (IBAction)unwindSegueToRedViewController:(UIStoryboardSegue *)segue {

    

}

需要注意的是这个方法的返回值必须是ibaction,参数必须是uistoryboardsegue。至于为什么,后面的代码会有体现。

回到storyboard文件,观察到RedViewController的scene下方有个绿色的按钮(不是因为写了上面的代码才出现绿色按钮,而是一直都存在的)。


接下来,右键exit按钮(绿色按钮),就会出现刚才写的方法unwindseguetoredviewcontroller:


选中这个方法,拖拽至YellowViewController的back redvc按钮。


放手之后,会在back redvc附近出现一个action的提示,选中。这样,当点击yellowviewcontroller的back red vc按钮之后,就会跳回red view controller。编译一下,取保没有问题。运行程序。

需要的说明:

1.如果你像从yellowviewcontroller返回到redviewcontroller,那么unwind segue关联的方法必须要再redviewcontroller中写明,即此例子中的-(inaction)unwindtoredviewcontroller:(uistoryboardsegue *)segue;注意参数和返回指,方法名任意。

2.是右键redviewcontroller的exit按钮(绿色按钮)出现unwind segue可以关联的方法,然后去关联yellowviewcontroller的button。

同理,可以做BlueViewController返回到YellowViewController的实现。

在YellowViewoController.m中

- (IBAction)unwindToYellowViewController:(UIStoryboardSegue *)segue {

    

}

右键yellowviewcontroller的exit按钮,关联blueviewcontroler的back yellowvc 按钮。

还需要实现从blueviewcontroller直接返回到redviewcontroller中,选中redviewcontroller的exit按钮,选择unwindtoredviewcontroller关联blueviewcontroller上的按钮。

编译一下,没有任何问题,运行程序,感受一下。

从YellowViewController和BlueViewController都可以返回到RedViewController,此时需要做一个判断,看看到底是从哪里返回的。

  1. - (IBAction)unwindSegueToRedViewController:(UIStoryboardSegue *)segue {
  2. UIViewController *sourceViewController = segue.sourceViewController;
  3. if ([sourceViewController isKindOfClass:[YellowViewController class]]) {
  4. NSLog(@"from yellow vc");
  5. }
  6. else if ([sourceViewController isKindOfClass:[BlueViewController class]]) {
  7. NSLog(@"from blue vc");
  8. }
  9. }

这也是为什么方法的参数是segue的原因,通过segue可以拿到source view controller(源视图控制器)。

尝试push之后,modal也是同样的道理,用modal模式从blueviewcontroller展示greenviewcontroller。

要想返回,需要在blueviewcontroller中写关联unwind segue的方法:

- (IBAction)unwindToBlueViewController:(UIStoryboardSegue *)segue {

    

}

关联unwindtoblueviewcontroller方法到相应的button上。

至此,使用storyboard“返回”就告一段落了,大多数时间,花销在拖拽控件上,根本没有写相关pop dismiss方法。这也是storyboard的一大优势。

是不是也可以用代码实现呢?可以的。

在storyboard中选中GreenViewController scene,在左侧可以看到unwind segue的表示,有点像DNA序列是的,选中之后,定义它的唯一表示为greenUnwind

在greenviewcontroller.m中

back code按钮关联的方法:

  1. -(IBAction)backCodeBtnTapped:(id)sender {
  2. [self performSegueWithIdentifier:@"greenUnwind" sender:self];
  3. }

编译一下,没有任何错误,运程程序。

转载于:https://www.cnblogs.com/melons/p/5792019.html

iOS Storyboard unwind segues使用小结相关推荐

  1. 什么是Unwind segues,您如何使用它们?

    本文翻译自:What are Unwind segues for and how do you use them? iOS 6 and Xcode 4.5 has a new feature refe ...

  2. 对比 Android 的 Intent 与 iOS StoryBoard 的 Segue - Intent 如果也能增加个prepareForSegue回调就好了

    对比 Android 的 Intent 与 iOS StoryBoard 的 Segue - Intent 如果也能增加个prepareForSegue回调就好了 太阳火神的美丽人生 (http:// ...

  3. iOS界面设计切图小结

    iOS界面设计切图小结 APR 12TH, 2013 1.基本尺寸 (1)界面 实际设计时按: iPhone4.4s:640px*960px iPhone5: 640px*1136px iPad:15 ...

  4. [IOS] Storyboard全解析-第二部分

    如果你想了解更多Storyboard的特性,那么你就来对了地方,下面我们就来接着上次的内容详细讲解Storyboard的使用方法. 在上一篇<Storyboard全解析-第一部分>中,我们 ...

  5. iOS storyboard 用法详解

    发布于:2013-12-13 15:57阅读数:118220 Storyboard是一项令人兴奋的功能,在iOS5中首次推出,在开发app的界面时可以极大地节省时间. 如下图所示,这就是一个完整的应用 ...

  6. [IOS] Storyboard全解析-第一部分

    (Storyboard)是一个能够节省你很多设计手机App界面时间的新特性,下面,为了简明的说明Storyboard的效果,我贴上本教程所完成的Storyboard的截图:    现在,你就可以清楚的 ...

  7. iOS storyBoard 和 纯代码 实现 九宫格 切图

    一,在StoryBoard中实现九宫格切图: 1.把图片添加到Assets.xcassets文件夹里 2.选择这个图片 3.点击"Show Slicing" 二,用纯代码实现九宫格 ...

  8. iOS StoryBoard自适应布局

    原文地址:点击打开链接 通用的Storyboard 通用的stroyboard文件是通向自适应布局光明大道的第一步.在一个storyboard文件中适配iPad和iPhone的布局在iOS8中已不再是 ...

  9. 关于iOS中图片处理的小结

    iOS实现图形编程可以使用三种API(UIKIT.Core Graphics.OpenGL ES及GLKit). 这些api包含的绘制操作都在一个图形环境中进行绘制.一个图形环境包含绘制参数和所有的绘 ...

最新文章

  1. 自建28核树莓派集群,顺便学学docker,这里有一个500美元的搭建方案
  2. [更新问题]无法在安装新的版本前,为“./boot/vmlinuz-2.6.24-19-generic”做一个符号链接备份...
  3. Hadoop的Mapreduce中Mapper的key和Map的key的区别
  4. mysql存储过程迭代自己获取所有子孙
  5. kafka计算机专业读法_终于知道Kafka为什么这么快了!
  6. 2016/09/19
  7. 查阅我们JavaScript学习新指南
  8. 一些爱不释手的 Chrome 插件
  9. JAVA 配合 Vue前台,完成中文、拼音全拼、拼音首字母检索
  10. 2022牛客多校9 BTwo Frogs(概率DP)
  11. H5如何获取内网IP和公网IP
  12. java获取项目所在服务器的ip地址和端口号(获取当前ip地址)
  13. Python实现EM
  14. 美国的网络空间安全国家战略补充材料
  15. 四轴平面机器人的手眼标定
  16. myeclipse中java.lang.OutOfMemoryError: PermGen space
  17. 知网专利信息爬虫!强无敌!
  18. 高仿Android QQ2012登陆界面和注册界面
  19. java时差_Java中的时差
  20. 《Linux内核分析》 第三周 构造一个简单的Linux系统MenuOS

热门文章

  1. 中国爬虫违法违规案例汇总
  2. 如何正确访问 redis 中的海量数据?避免事故产生
  3. 蚂蚁面试:字符串在JVM中如何存放?
  4. Redis 分布式缓存 Java 框架
  5. Java集合:HashMap线程不安全?有哪些表现?
  6. SpringBoot:Inferred type 'S' for type parameter 'S' is not within its bound
  7. 48.聊一聊constexpr变量
  8. 数据结构-求一个字符串中的某个子串(C语言)
  9. linux 关闭网络防火墙设置方法,CentOS Linux防火墙配置及关闭方法
  10. android出现adpt2的问题,android - 尝试在空对象引用上调用接口方法'int android.database.Cursor.getCount()'[重复] - 堆栈内存溢出...