最近钻研了一下页面进入退出的方式。
present/dismiss
present:dismiss.png页面进入方式如下两种:
- RootViewController --present--> NaviController1 --present--> NaviController2
- RootViewController --present--> NaviController1 --push--> ViewController1 --present--> NaviController2
调用dismiss的结果:
- 在 NaviController2 处调用 dismiss,然后在 NaviController1 处调用 dismiss,会分别退出 NaviController2 的页面和 NaviController1 的页面。
- 在 NaviController1 处调用 dismiss 两次,也会分别退出 NaviController2 的页面和 NaviController1 的页面。
- 在 ViewController1 处调用 dismiss 两次,也会分别退出 NaviController2 的页面和 NaviController1 的页面。
- 在RootViewController 调用 dismiss,会推出其推出的所有界面,再次调用无响应。
调用dismiss的时候如果 viewcontroller 有对应的 navi 的话,UIKit 会把请求传递给 navi 处理,因此navi 中 viewcontroller 的调用结果同 navi 中的调用结果是相同的
present 的时候不区分是不是包含 navi,只要是 viewcontroller 的子类就能够 present 出界面。但是 present 的界面不能是一个 navi 的 viewcontroller 而必须是 navi 本身。
push/pop
push:pop.png页面进入方式如图,都是push进入。
调用pop结果:
- 在 RootViewController 中调用 pop 三次,全部退出页面;
- 在 ViewController1 中调用 pop 三次,全部退出页面;
- 在 ViewController2 中调用 pop 两次,ViewController1 中调用 pop 一次,全部退出页面;
以此类推
调用pop的时候会找到 viewcontroller 的 navi,UIKit 会把请求传递给 navi 处理,因此navi 中 viewcontroller 的调用结果同 navi 中的调用结果是相同的
综上,调用 dismiss 或者 pop都只需要找到最后一个 viewcontroller 然后调用就可以了。不过也没啥用处,还是自身处理相关的退页比较合适。
网友评论