04- 導(dǎo)航控制器管理原則
程序一進(jìn)入時(shí),就要讓窗口的根控制器是一個(gè)導(dǎo)航控制器.
1.新建窗口
2.創(chuàng)建導(dǎo)航控制器.并設(shè)置導(dǎo)航控制器的根控制器
3.把導(dǎo)航控制器設(shè)為窗口的根控制器.
4.顯示窗口.
說(shuō)明:1.當(dāng)設(shè)置導(dǎo)航控制器的根控制器時(shí),也就是initWithRootViewController,
它底層其實(shí)是調(diào)用了導(dǎo)航控制器的push方法.把該控制器添加為導(dǎo)航控制器的子控制器.
并且它會(huì)把該控制器的View添加到導(dǎo)航控制器專門(mén)存放子控制器的View上面.
2.把導(dǎo)航控制器設(shè)為窗口的根控制器時(shí),它就會(huì)把導(dǎo)航控制器的View添加到窗口的View上面.
所以程序一運(yùn)行時(shí), 我們看到的就是一個(gè)導(dǎo)航控制器的View.
導(dǎo)航控制器的View內(nèi)部默認(rèn)有兩個(gè)子view.一個(gè)是導(dǎo)航條, 一個(gè)是轉(zhuǎn)專存放子控制器的View.
現(xiàn)在專門(mén)存放子控制器的View里面存放的就是導(dǎo)航控制器根控制器的View.
導(dǎo)航控制器的子控制器都是存放到一個(gè)棧中.也就是一個(gè)數(shù)組當(dāng)中.
當(dāng)調(diào)用導(dǎo)航控制器的push方法時(shí), 就會(huì)把一個(gè)控制器壓入到導(dǎo)航控制器的棧中.
壓入棧中是, 那么剛壓入棧中的這個(gè)導(dǎo)航控制器就在棧的最頂部.
它就會(huì)把原來(lái)導(dǎo)航控制器View當(dāng)中存放的子控制器View的內(nèi)容移除,
然后把導(dǎo)航控制器棧頂控制器的View添加到導(dǎo)航控制器專門(mén)存放子控制器View當(dāng)中.
注意:只是把控制器的View從導(dǎo)航控制器存放子控制器的View當(dāng)中移除,并沒(méi)有把控制器從棧中移除.所以上一個(gè)控制器還在.
當(dāng)調(diào)用pop當(dāng)方法時(shí), 就會(huì)把導(dǎo)航控制器存放子控制器View當(dāng)中控制器的View移除,并且會(huì)把該控制器從棧里面移除.
此時(shí)該控制器就會(huì)被銷毀.接著它就會(huì)把上一個(gè)控制器的View添加到導(dǎo)航控制器專門(mén)存放子控制器的View當(dāng)中.