present的时候是可以直接回到第一个viewcon的

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

 [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就可以了。

时间: 2024-10-29 00:09:58

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

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

android webview点击返回键返回上一个html 1 @Override 2 public boolean onKeyDown(int keyCode, KeyEvent event) { 3 if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) { 4 mWebView.goBack();// 返回前一个页面 5 return true; 6 } 7 return super.onKeyDown(keyCod

侧滑手势控制器连动的效果,回到上一个控制器

Navigation包装的控制器,返回的时候上一个navigationBar也一起滑动的实现demo 在这里可以自定义NavBar + Swipeback 将系统的navBar隐藏,之后自定义一个view作为系统的navBar 自定义一个Vc作为base类. 在这个里面加载NavBar demo地址

vue回到上一个位置

路由 export default new Router({ // mode: 'history', routes: [ { path: '/', name: 'Home', component: Home, meta: { keepAlive: true } } ], // 页面切换始终在最顶部 scrollBehavior (to, from, savedPosition) { console.log(savedPosition) if (savedPosition) { return sa

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

当你在页面上用 form post 内容时,可能会遇到以下异常: The required antiforgery cookie "????????" is not present. 咱们来重现一下错误.新建一个 ASP.NET Core 项目,模板选[空]就行了,这是老周最喜欢的项目模板,空 == 自由. 在项目下建一个目录,叫 Pages,用来放 Razor 页面:然后建一个 Index.cshtml 页. 之所以叫 Index.cshtml,是因为 Index 是默认页的名字,这

JavaScript实现回到顶部

HTML页面使用一个a标签,href内填写JavaScript:;以阻止默认行为,在学习实例的时候添加一个大的div来充实页面. demo: <a href="javascript:;" id="btn" title="回到顶部"></a> 其css代码为: #btn{ display: none; position: fixed; left: 90%; bottom: 40px; height:60px; width:

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

Linux 克隆虚拟机引起的"Device eth0 does not seem to be present, delaying initialization" 虚拟机Vmware上克隆了一个Red Hat Enterprise Linx启动时发现找不到网卡,如下所示,如果你在命令窗口启动网络服务就会遇到"Device eth0 does not seem to be present, delaying initialization"错误 关于这个错误,搜索了一下网

Android Application Fundamentals——Android应用程序基础知识

Application Fundamentals--应用程序基础知识 Key classes--关键类 Activity Service BroadcastReceiver ContentProvider Intent In this document--在这篇文章中 Application Components--应用程序组件 Activating components: intents--激活组件:意图 Shutting down components--关闭组件 The manifest

【开源】浅谈Hybrid技术的设计与实现第二弹

前言 接上文:浅谈Hybrid技术的设计与实现(阅读本文前,建议阅读这个先) PS:据说加个开源在前面阅读量高点,于是就试试咯...... 上文说了很多关于Hybrid的概要设计,可以算得上大而全,有说明有demo有代码,对于想接触Hybrid的朋友来说应该有一定帮助,但是对于进阶的朋友可能就不太满足了,他们会想了解其中的每一个细节,甚至是一些Native的实现,小钗这里继续抛砖引玉,希望接下来的内容对各位有一定帮助. 进入今天的内容之前我们首先谈谈两个相关技术Ionic与React Nativ

android 中FragmentActivity中模拟返回键返回上一个Activity效果

FragmentTransaction中先加入一个Fragment,这个Fragment就是当前要显示的Fragment, 当通过事件触发显示第二个Fragment时,在加入第二个Fragment并调用fragmentTransaction.addToBackStack(null); 在onBackPressed方法中调用mFragmentManager.popBackStack();回到第一个Fragment package com.example.fragmentdemo; import a