iOS模态视图小结

一开始,我觉得iOS模态视图只不过和push&pop差不多,都是为了实现跳转而生的。而且它比push更方便的是它不需要UINavigationController,直接使用代码:

    ModalViewController *mvc =  [[ModalViewController alloc] init];
    [self presentViewController:mvc animated:YES completion:nil];

就可以实现跳转。然后返回的话使用代码:

[self dismissViewControllerAnimated:YES completion:nil];

就可以实现返回上一个页面。

 

后来,我了解到modal和show方式跳转的区别除了是否存在导航栏,还体现在业务上。一般来说同一业务内跳转应该使用show方式跳转,而modal适用于从这一业务切换到另一业务的场景。

 

现在,通过阅读到喵神的博客我发现原来dismiss方法还有我之前一直没有注意到的内容:

通常之前,我A控制器 Modal B控制器,使用present方法,然后B控制器返回A控制器,我就在B控制器调用dismiss方法。

这在用法上是没有什么问题的,因为Apple文档dismiss方法的discussion中有指出如果在被modal出的控制器(这里假设就是B控制器,以下简称为B)执行dismiss方法,而且B正好是在视图层级中显示在最外层的话,那么B就会自己将自己移除掉。

由此,很长一段时间我认为dismiss方法就只是用来移除自身的。其实不然,dismiss方法它还可以移除自己modal出来的视图控制器

举个例子:(假设->代表modal)

A->B->C

如果在B中执行dismiss方法,则结果就是Bmodal出来的C被移除。B自身并不会被移除!

还有一个情况,如果在A中执行dismiss方法,那么Amodal出来的B就会被移除,Bmodal出的C因为B被移除了,C自己也就被移除了。不过移除动画只有B被移除的动画被显示,C的移除动画是没有的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星仔20180409

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值