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