iOS之ViewController的多层presentViewController的dismiss问题

今天在Q群里有人问了个这么个问题: A,B,C,D 都是Viewcontroller。A、B、C、D使用present去切的

他是这么搞的: A -> B, B ->C, C->D,然后他想在D直接到A控制器中。问有没有什么办法?

1、 首先先不管这个问题,我们来一起说说push 和present的一些区别?

present: 有一种效果,模态切换。它是VC的一个方法。

上图中的下面两个方法是7以上被废弃了。

push:依赖于导航栏。它是导航栏的一个特有方法.

当然没还有个区别:present可以立即显示一个View,后者是把一个View压进栈,然后显示出来。

对于如何从d->a  dismiss的问题  想了到了个办法:

在dismiss的时候如果你是一层一层dimiss的话会出现一个一个界面消失的间隔,这个时候我找了很多资料,但是没有找到解决办法都是那么一层一层去搞,用户体验不好。像我这种有UI洁癖的是果断不能接受的。

于是我想为什么present可以一层一层present,还可以一层一层dimiss,感觉有点像push的stack,但更形象的说VC之前存在一种关系,就像一条线。这不禁让我想起了数据结构中的链表。当时周围的一个伙伴给我出了个主意-----后一个vc指向前一个vc,然后每层dimiss。  然后在之前资料中找到“苹果的思维非同凡响,其实你只需要解散一个Modal View Controller就可以了。即处于最底层的View Controller,这样处于这个层之上的ModalView Controller统统会被解散。” 经典,果然 

 最后在d中一句代码搞定:

[self.presentingViewController.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];

然后,然后的然后就是prefrect。

 

总结:

在这个过程中,我还用过通知去解决,然后我在b和c都进行处理对d发出的通知。然而事情并不会d->c->b->a dimiss.哈哈,我太天真了。

消息发出之后,接受者接收执行操作,他们接收的先后顺序是不知道的,我太自以为是了,哈哈。别😊我.

 

 

 

 

posted @ 2015-08-12 18:10  OHeroJ  阅读(5484)  评论(0编辑  收藏  举报