iOS 简单push和present混用退回根视图方法

来源:互联网 发布:java返回值前面加泛型 编辑:程序博客网 时间:2024/06/06 09:14

今天这个真的我很想写一篇很详细的的文章来说明这两个混用后的推出方法,因为之前折磨了我很久。

简单的用一张图来概括下情况。


需要实现的最终结果是从F界面一下子回到A界面


这里分别有六个页面,ADEF分别带有导航栏,就是一个导航控制器,而bc是没有的,因为需要将bc做成背景半透明可以看到上一个页面的内容的页面。因为技术太烂,不会用弹出框来实现效果,所以选择了present出页面来实现相同的效果,一开始是想着先将基本功能实现了,但是等所有功能实现的时候发现了一个没法搞定的问题,就是从F界面回到A界面是个很困难的问题,因为D是带有导航栏的,所以在C到D的时候,将D设置成rootViewController,这样一来,如果想从最后一个界面回到最初的界面的时候用poptoRootViewController是实现不了的,会跳到D界面,用其他集中回退方式都无法实现。

那怎么办呢,看到这里,大神的话应该会轻松写意的搞定,当然大神也不会选择我这样的方式来实现功能,所以我这也只是对走弯路的新手来说的。对于新手的我来说,想了好几天,最后deadline的时候,灵光一现。想到了一个很简单的解决办法。

在C界面present到D界面的方法中,将present拿掉,改成用通知,并将界面dismiss掉

[[NSNotificationCenter defaultCenter]postNotificationName:@"pushD" object:self];

[self dismissViewControllerAnimated:YES completion:nil];

注册一个通知发送,然后在A界面接受通知。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pushD) name:@"pushD" object:nil];

-(void)pushD

{

D *d = [[d alloc]init];

[self.navigationController pushViewController:d animated:YES];

}


这样就实现了从在F只要poptorootViewController就可以了。一下子就回到了A界面。
可能是我语文太差的原因,这里没有解释的特别清楚,用的方法可能也比较笨,因为一个半透明背景的选择列表大部分人是不会做成一个单独的页面的吧,都会选择用弹出框的形式,因为我对弹出框有点搞不明白,所以就选择一个比较笨的方式来实现,present出来的界面可以自下而上弹出,正好跟我需要的效果不谋而合,就选择了这个方式。

要是有看官看到我写的东西不太明白的话,大可直接评论问我就行。
0 0
原创粉丝点击