UINavigationController的popViewControllerAnimated問題


UINavigationController是IOS編程中的一個view controller的容器,通過棧管理viewControllers,每一次push操作都將在棧頂添加一個view controller,然后通過pop將該棧最頂端的controller移除。

我們在工程中,通常會在controller中執行

[self.navigationController popViewControllerAnimated:NO];來移除棧頂controller。

    假設現在有UIViewController的子類對象,A、B、C、D。

    //將A控制器設置為根控制器

    UINavigationController *myFirstCtrl = 

  [[UINavigationController alloc] initWithRootViewController:myFirstCtrl];

    self.window.rootViewController = m_firstCtrl;

 

    //在A控制器中,push B控制器

    ....

 

    [self.navigationController pushViewController:B animated:NO];

    ....

 

    

    //在B控制器中,push C控制器

    ....

 

    [self.navigationController pushViewController:C animated:NO];

    ....

 

    

    //在C控制器中,push D控制器

    ....

 

    [self.navigationController pushViewController:D animated:NO];

    ....

 

    則此時A控制器的棧中,有四個元素,我們認為在B、C、D中都沒有pop操作,此時,在A控制器中,執行[self.navigationController popViewControllerAnimated:NO];則是將D控制器從棧中移除,並非我們理解的將A控制器本身移除。同樣,再次執行時,是將C控制器移除。

    以前,我都是認為移除自身的,今天跟同事進行討論后,寫了一個demo驗證了一下,才知道了真相。所以,寫出來跟大家分享一下,也許大家已經知道了,聞道有先后,雖然我可能知道的遲了點,但是我還是很高興分享出來,給還不知道的朋友。


免責聲明!

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



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