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的移除动画是没有的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章