iOS技术

present/dismiss与push/pop

2022-04-11  本文已影响0人  xo1988

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

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 然后调用就可以了。不过也没啥用处,还是自身处理相关的退页比较合适。

上一篇 下一篇

猜你喜欢

热点阅读