iOS 中push和pop到底系统作了些什么事

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

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

 

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

 

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

[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,那么就会有popcode

[self.navigationController popViewControllerAnimated:YES];

 

苹果作的事:blog

[VC willMoveToParentViewController:nil];    // 1
[VC.view removeFromSuperview];    // 2 [VC removeFromParentViewController]; // 3

 

  • 第一步,用willMoveToParentViewController这个方法,并把参数设置为nil,通知VC这个Controller即将被移除父视图控制器。
  • 第二步,把VC.view移除出父视图控制器的view。
  • 第三步,而后用removeFromParentViewcontroller这个方法把VC完全移除。

 

 

 

下面贴出RESideMenu的源码里面它作的处理(实际上是一个道理)rem

 

 

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

相关文章
相关标签/搜索