modal segue会占据整个屏幕,所以使用的使用一定要小心,提前做好返回的处理,使用modal segue的好处是在执行某项操作前必须,比如我们熟悉的alert和actionsheet。
比如手机中的联系人页面,点击右上角的加号会出现一个添加联系人的页面,整个页面的划出方式就是modalsegue。通常modalsegue中的取消按钮会取消当前的操作,而确定按钮会提交当前的操作。注意modal segue生成的MVC也可以嵌套,比如增加联系人页面中的增加联系人头像按钮也是一个modal segue的MVC。
总之使用modal segue要小心,至于如何使用modal segue的问题,在连线的时候选择Modal,如果不是通过按钮调用segue,你可以在代码中直接调用performSegue方法,或者presentViewController方法。
在方法prepareForSegue中modal和其他方式没有区别。那么该如何从modal segue创建的MVC中返回呢?通常情况下整个MVC都会和某些数据做交互,不需要返回任何信息,比如新增一个联系人,如果你有需要,可以使用unwind segue进行交互,但是大部分modal MVC都只会dismiss(移除)它们自己而已。那么该如何移除呢?如果使用unwind的话在返回指定控制器后会自动移除当前的控制器。如果不适用unwind就需要主动调用dismiss了,调用下面的方法:
dismissViewControllerAnimated,接着就会返回之前的MVC(也就是使用modal segue生成MVC的MVC)。dismiss只针对当前展示给用户的MVC,在任何时候被modal segue的MVC都知道是谁弹出的自己。
关于modal segue的动画效果:我们看到使用modal segue的MVC是从下面滑出来的,这是默认的方式.CoverVertical,还有其他方式,比如
.FlipHorizontal:翻转效果,弹出的MVC与之前的MVC通过翻转交换位置。
.CrossDissolve:新的MVC淡入,旧的MVC淡出。
.PartialCurl:从底下翻出一个角展示一个新的MVC。