present/dismiss与push/pop

最近钻研了一下页面进入退出的方式。

present/dismiss

present:dismiss.png

页面进入方式如下两种:

  1. RootViewController --present--> NaviController1 --present--> NaviController2
  2. RootViewController --present--> NaviController1 --push--> ViewController1 --present--> NaviController2

调用dismiss的结果:

  1. 在 NaviController2 处调用 dismiss,然后在 NaviController1 处调用 dismiss,会分别退出 NaviController2 的页面和 NaviController1 的页面。
  2. 在 NaviController1 处调用 dismiss 两次,也会分别退出 NaviController2 的页面和 NaviController1 的页面。
  3. 在 ViewController1 处调用 dismiss 两次,也会分别退出 NaviController2 的页面和 NaviController1 的页面。
  4. 在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结果:

  1. 在 RootViewController 中调用 pop 三次,全部退出页面;
  2. 在 ViewController1 中调用 pop 三次,全部退出页面;
  3. 在 ViewController2 中调用 pop 两次,ViewController1 中调用 pop 一次,全部退出页面;
    以此类推

调用pop的时候会找到 viewcontroller 的 navi,UIKit 会把请求传递给 navi 处理,因此navi 中 viewcontroller 的调用结果同 navi 中的调用结果是相同的

综上,调用 dismiss 或者 pop都只需要找到最后一个 viewcontroller 然后调用就可以了。不过也没啥用处,还是自身处理相关的退页比较合适。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容