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

 

 

上面原理部分參考的是彥祖的一篇博客的一部份內容源碼

相關文章
相關標籤/搜索