zoukankan      html  css  js  c++  java
  • iOS 中push和pop到底系统做了些什么事

    iOS中的push和pop是一个很常用的视图切换方法,他们是成对出现的,

    简而言之,push就是压栈,pop就是出栈!

    [self.navigationController pushViewController:VC animated:YES];

    那么苹果为实现这一句话具体做了些什么事呢?

    [self addChildViewController:VC];                                   // 1
     VC.view.frame = [self frameForContentController];       // 2
     [self.view addSubview:VC.view];                                     // 3
     [VC didMoveToParentViewController:self];                    // 4   
    • 第一步,NavigationController用addChildViewController这个函数把VC这个controller添加作为自己的子视图控制器。
    • 第二步,设置VC这个controller里的根view的frame。
    • 第三步,把VC.view添加到Navigationcontroller.view上。
    • 第四步,用didMoveToParentViewController这个方法通知已经push完毕。

    既然有push,那么就会有pop

    [self.navigationController popViewControllerAnimated:YES];

    苹果做的事:

    [VC willMoveToParentViewController:nil];    // 1
    [VC.view removeFromSuperview];    // 2 [VC removeFromParentViewController]; // 3
    • 第一步,用willMoveToParentViewController这个方法,并把参数设置为nil,通知VC这个Controller即将被移除父视图控制器。
    • 第二步,把VC.view移除出父视图控制器的view。
    • 第三步,然后用removeFromParentViewcontroller这个方法把VC彻底移除。

    下面贴出RESideMenu的源码里面它做的处理(其实是一个道理)

    上面原理部分参考的是彦祖的一篇博客的一部分内容

  • 相关阅读:
    方式方法和思维技巧集合
    【NOIP/CSP2019】D2T1 Emiya 家今天的饭
    【NOIP/CSP2019】D1T2 括号树
    【网络流24】餐巾
    【NOIP2016】愤怒的小鸟
    结论和典例集合
    2020牛客寒假集训营第一场题解
    新生训练赛001题解
    The 2014 ACM-ICPC Asia Regional Contest Xi'an Site题解
    SDNU ACM-ICPC 2019 Competition For the End of Term(12-15)山师停训赛题解
  • 原文地址:https://www.cnblogs.com/WayneLiu/p/5138993.html
Copyright © 2011-2022 走看看