iOS Storyboard unwind segues使用小结
使用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,此时需要做一个判断,看看到底是从哪里返回的。
- - (IBAction)unwindSegueToRedViewController:(UIStoryboardSegue *)segue {
- UIViewController *sourceViewController = segue.sourceViewController;
- if ([sourceViewController isKindOfClass:[YellowViewController class]]) {
- NSLog(@"from yellow vc");
- }
- else if ([sourceViewController isKindOfClass:[BlueViewController class]]) {
- NSLog(@"from blue vc");
- }
- }
这也是为什么方法的参数是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按钮关联的方法:
- -(IBAction)backCodeBtnTapped:(id)sender {
- [self performSegueWithIdentifier:@"greenUnwind" sender:self];
- }
编译一下,没有任何错误,运程程序。
iOS Storyboard unwind segues使用小结的更多相关文章
- iOS界面设计切图小结
iOS界面设计切图小结 APR 12TH, 2013 1.基本尺寸 (1)界面 实际设计时按: iPhone4.4s:640px*960px iPhone5: 640px*1136px iPad:15 ...
- 对照 Android 的 Intent 与 iOS StoryBoard 的 Segue - Intent 假设也能添加个prepareForSegue回调就好了
对照 Android 的 Intent 与 iOS StoryBoard 的 Segue - Intent 假设也能添加个prepareForSegue回调就好了 太阳火神的漂亮人生 (http:// ...
- iOS Storyboard全解析
来源:http://iaiai.iteye.com/blog/1493956 Storyboard)是一个能够节省你很多设计手机App界面时间的新特性,下面,为了简明的说明Storyboard的效果, ...
- iOS Storyboard 的基本用法
(Storyboard)是一个能够节省你很多设计手机App界面时间的新特性,下面,为了简明的说明Storyboard的效果,我贴上本教程所完成的Storyboard的截图: 现 在,你就可以清楚的看 ...
- IOS Storyboard使用-模拟登录、注册、混合使用
最近分析IOS的占有率,发现5.0以下的少之又少了,故而决定新的App用 Storyboard开发,找了很多资料都是点上的,这个简单的demo是测试代码,发上来,供新手参考. 模拟登录.注册.和显示主 ...
- [IOS] Storyboard全解析-第一部分
(Storyboard)是一个能够节省你很多设计手机App界面时间的新特性,下面,为了简明的说明Storyboard的效果,我贴上本教程所完成的Storyboard的截图: 现在,你就可以清楚的看到这 ...
- iOS Storyboard适配问题
通用的Storyboard 通用的stroyboard文件是通向自适应布局光明大道的第一步.在一个storyboard文件中适配iPad和iPhone的布局在iOS8中已不再是梦想.我们不必再为不 ...
- iOS应用构建与部署小结
注:本文首发于我的个人博客:https://evilpan.com/2019/04/06/ios-basics/ 上篇文章介绍了Objective-C的基本概念,本文就来接着看如何创建我们的第一个简单 ...
- iOS开发之山寨版新浪微博小结
在之前的博客IOS开发之新浪围脖中获取微博的内容是使用我自己的access_token来请求的数据,那么如何让其他用户也能登陆并获取自己的微博内容呢?接下来就是OAuth和SSO出场的时候啦.OAut ...
随机推荐
- 【BZOJ4003】【JLOI2015】城池攻占(左偏树)
题面 题目描述 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池.这 n 个城池用 1 到 n 的整数表示.除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖,其中 fi ...
- [BZOJ3207] 花神的嘲讽计划Ⅰ (主席树)
Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: “哎你傻不傻的![hqz:大笨J]” “这道题又被J屎过了!!” “J这程序怎么跑这么快!J要逆袭了!” …… 描述 这一天D ...
- datatable 多字段 排序;
没有找到datatable的排序方面运用案例,根据接口,自己实现 所以记录一二,小伙伴们有更好的方法,欢迎讨论 1.需求图 2.需求 1)默认 未开启 灰色下箭头 2)第一次点击 :启动排序,降序- ...
- java设计模式单例模式 ----懒汉式与饿汉式的区别
常用的五种单例模式实现方式 ——主要: 1.饿汉式(线程安全,调用率高,但是,不能延迟加载.) 2.懒汉式(线程安全,调用效率不高,可以延时加载.) ——其他: 1.双重检测锁式(由于JVM底层内部模 ...
- Unity中List的随机排序(乱序)
为什么要给List排序做一个Unity限定条件呢 首先,是C#中的List泛型,若是Java,直接调用Collection.shuffle()就OK了 而Unity的C#版本较低,不能使用Random ...
- JVM内存越多,能创建的线程越少,越容易发生java.lang.OutOfMemoryError: unable to create new native thread。
一.认识问题: 首先我们通过下面这个 测试程序 来认识这个问题:运行的环境 (有必要说明一下,不同环境会有不同的结果):32位 Windows XP,Sun JDK 1.6.0_18, eclipse ...
- 深度揭秘腾讯云TSF日调用量超万亿次背后技术架构
腾讯云TSF是整合外部开源框架和腾讯内部历经多年锤炼的PaaS平台打造而成的企业级分布式应用服务开发与托管平台,本文重点对TSF中负责服务托管的PaaS平台进行揭秘,从技术角度解析TSF 平台是如何每 ...
- Linux Centos 下安装软件 三种方式(转)
Linux学习的路还很远呢,各位码农,新年快乐哈! 1)一种是软件的源代码,您需要自己动手编译它.这种软件安装包通常是用gzip压缩过的tar包(后缀为.tar.gz). 2)另一种是软件的可执行程序 ...
- unity A*寻路 (二)读取NavMesh数据
上一章节我们已经看了怎么获得NavMesh数据保存为obj 这一章节我们来读取NavMesh数据 首先我们要定义两个结构体 点 和 三角形 为什么不用unity自带的Vector3呢? 相信你们应该已 ...
- 1.Java关键字和保留字
关键字和保留字 http://www.cnblogs.com/wwxbi/p/4292170.html 访问控制 private protected public 类,方法和变量修饰符 abstrac ...