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的源碼里面它做的處理(其實是一個道理)

 

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM