最新:我并没有记错,是可以直接回到的

 [self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:YES]; 

如:A present B     然后B present C

现在想在C里实现方法,能直接回到A,我原以为有类似的方法呢:self.parentviewcontroller dismiss.........

谁知刚才试了下不行,后来问群里的兄弟 说我可以是记错了,只有navigationcontroller的时候是可以直接回到rootviewcontroller的,而dismiss只能一层一层的去掉

难道没有别的办法实现直接dismiss到A了吗: 非也!!!

根据群里兄弟的建议:

你就B加委托,弹出C的时候,C调用dismiss,回调通知B也dismiss

转载自: http://blog.csdn.net/kmyhy/article/details/7034202

一个View Controller A,弹出了一个Modal View Controller B,B又弹出了一个Modal ViewController C⋯⋯and so on。

如果你在第n个Modal View Controller的时候,想回到第一个View Controller A,或者它前面的第m个ModalView Controller C,那怎么办?

你一定想,一层层地解散呗。没错,我一开始也是这样干的:在C里解散D,在B里解散C,在A里解散B。那么你会获得一个“试图解散当前未显示的View Controller”错误。

苹果的思维非同凡响,其实你只需要解散一个Modal View Controller就可以了。即处于最底层的View Controller,这样处于这个层之上的ModalView Controller统统会被解散。

例如:你只用在A中解散B,则C、D、E、F……统统会自动被解散了。

问题在于,你在F中如何获得A? 如果是iOS 4,你可以使用parentViewController来获得当前Modal ViewController的“父View Controller”并解散自己。如果是iOS 5,你就得用presentingViewController了。

这样,你可以不停地parentViewController.parentViewController.parentViewController 下去就可以了。

代码:

if ([self respondsToSelector:@selector(presentingViewController)]) {

    [self.presentingViewController.presentingViewControllerdismissModalViewControllerAnimated:YES]; // for IOS 5+

} else {

   [self.parentViewController.parentViewControllerdismissModalViewControllerAnimated:YES]; // for pre IOS 5

}

问题是,有时候你不好确定当前Modal View Controller是链中的哪一级。比如有一个工作流,它在B处有两个分支,一个是A->B->C->D,一个是A->B->D,走哪一个分支,依赖于用户的选择。不管D或者F,处理完之后都要返回到A来进行刷新。

在D这个地方要返回A时,你不好决定要用几个parentViewController才能返回A。因为可能是3个(分支1),也可能是2个(分支2)。这样的情况下你只有用协议或者委托了。把A作为一个delegate,沿着工作流不停地传递下去,这样不管走分支1还是分支2的流程,D都始终有一个A的引用。当D的工作完成时,直接调用A实现的协议方法,在A的这个方法中解散B就可以了。

present的时候是可以直接回到第一个viewcon的的更多相关文章

  1. android webview点击返回键回到上一个html

    android webview点击返回键返回上一个html @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ( ...

  2. Xamarin.Android 怎么定义一个按钮和返回键功能一样回到上一个界面

    https://zhidao.baidu.com/question/570934367.html页面之间的跳转有startActivity 和startActivityForResult两种,star ...

  3. vue 根据接口返回的状态码判断用户登录状态并跳转登录页,登录后回到上一个页面(http拦截器)

    背景:后台接口返回code==501表示用户是未登录状态,需要登录才可访问: 通过http拦截做路由跳转 第一步:src目录下新建http.js文件,内容如下: import Axios from ' ...

  4. 【ASP.NET Core】解决“The required antiforgery cookie "xxx" is not present”的错误

    当你在页面上用 form post 内容时,可能会遇到以下异常: The required antiforgery cookie "????????" is not present ...

  5. Determining IP information for eth0... failed; no link present. Check cable?

    在RedHat下重启网络,service network restart之后,出现问题 Determining IP information for eth0... failed; no link p ...

  6. JavaScript实现回到顶部

    HTML页面使用一个a标签,href内填写JavaScript:;以阻止默认行为,在学习实例的时候添加一个大的div来充实页面. demo: <a href="javascript:; ...

  7. Linux 克隆虚拟机引起的“Device eth0 does not seem to be present, delaying initialization”

    Linux 克隆虚拟机引起的“Device eth0 does not seem to be present, delaying initialization” 虚拟机Vmware上克隆了一个Red ...

  8. golang工具之present - 编写go特色的ppt

    简介: Golang Present 是 Golang 社群开发出來的一个简单工具,通过简单的语法可以制作 ppt(语法近似于 Markdown).   默认文件格式是 .slide ,是随着 gol ...

  9. 浅谈Hybrid技术的设计与实现第二弹

    前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 接上文:浅谈Hybrid技术的设计与实现(阅读本文前,建议阅读这个先) ...

随机推荐

  1. Jquery Validate根据其他元素的事件来触发单个元素的异步校验

    场景:在做一个车辆信息管理模块,而车牌是通过车牌颜色和车牌号码来确定唯一性的,录入车牌信息时需对车牌进行唯一性校验.

  2. [转]UINavigationController 返回的方法汇总

    [html] view plaincopy [self.navigationController popViewControllerAnimated:YES]; UINavigationControl ...

  3. 最小K个数之和

    描述 输入n个整数,输出其中最小的K个数之和.例如输入4,5,1,1,6,2,7,3,3这9个数字,当k=4,则输出最小的4个数之和为7(1,1,2,3). 输入 测试样例组数不超过10 每个测试案例 ...

  4. South——谁说Django不能migrate!

    零.前言 最近改一个项目,需要对已有的model进行更改.大家都知道Django自带的syncdb只能创建数据库,但是无法将已经改变的model应用的数据库中. 大概两年前遇到这个问题的时候,网上的答 ...

  5. HUST 1017 Exact cover (Dancing links)

    1017 - Exact cover 时间限制:15秒 内存限制:128兆 自定评测 6110 次提交 3226 次通过 题目描述 There is an N*M matrix with only 0 ...

  6. 关于Eclipse中Browser中显示html页面的总结.

    用Eclipse中的Browser显示html页面,因为"just small thing.. browser in the studio is light browser.. it can ...

  7. 24小时学通Linux内核--内核探索工具类

    寒假闲下来了,可以尽情的做自己喜欢的事情,专心待在实验室里燥起来了,因为大二的时候接触过Linux,只是关于内核方面确实是不好懂,所以十天的时间里还是希望能够补充一下Linux内核相关知识,接下来继续 ...

  8. 在CentOS6.4中安装配置LAMP环境的详细步骤

    本文详细介绍了CentOS6.4系统中安装LAMP服务并对其进行配置的过程,即安装Apache+PHP+Mysql,参照了网上大神的设置,其他Linux发行系统可以参考~ 在本文中部分命令操作需要ro ...

  9. SharePoint中 服务器发出意外响应。响应状态代码是"500"。

    原因是由于服务器内存不够.  

  10. echars3.0 柱状图大小设置

    { name:'百度', type:'bar', barWidth : 10, stack: '搜索引擎', data:[620, 732, 701, 734, 1090, 1130, 1120] } ...