美文网首页iOS技术
present/dismiss与push/pop

present/dismiss与push/pop

作者: xo1988 | 来源:发表于2022-04-11 17:13 被阅读0次

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

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

    相关文章

      网友评论

        本文标题:present/dismiss与push/pop

        本文链接:https://www.haomeiwen.com/subject/xyoisrtx.html