tab bar controller & navigation controller 的先後順序

開發 iOS App 時,我們時常使用 tab bar controller & navigation controller 串接多個頁面,比方以下唐詩 App 的範例:

點選李白顯示李白的作品。

點選白居易顯示白居易的作品。

先 tab bar controller,之後才接 navigation controller

如下圖所示,通常 navigation controller 會接在 tab bar controller 後面,因為這樣可讓每個 tab 有各自的 navigation controller,不同 tab 彼此獨立,不會互相干擾。

每個 tab 的 navigation controller 將控制此 tab 目前到第頁面,比方第一個 tab 進到第一頁,顯示詩人李白和杜甫,第二個 tab 進到第二頁,顯示白居易的作品。

先 navigation controller,之後接 tab bar controller 可以嗎 ?

基本上是不建議,雖然你硬要接也是接得起來,就像闖紅燈不好,但是你要闖紅燈也沒人可以阻止你。

其實 Interface Builder 本身就不建議我們這樣連,如下圖所示,當我們想將 tab bar controller embed in navigation controller 時,選項是灰底不能選的。

不過道高一尺,魔高一丈,我們還是可以另外拉出 navigation controller,然後再將它連到 tab bar controller。

storyboard 看起來沒什麼問題,但別開心得太早, App 執行後,將出現很大的問題 !

當我們點選李白進入李白的作品頁面後,下方的 tab bar 不見了 ! 所以現在切換 tab 很不方便,只能在第一頁切換 tab。

為什麼會這樣呢 ? 因為此時 navigation controller 把 tab bar controller & 它連接的詩人名稱頁面當成第一頁,而詩人作品則當成第二頁。因此切換到詩人作品頁面時,它會完全覆蓋第一頁,連 tab bar 也一起檔住。

由於以上的問題,開發 iOS App 時,我們通常會將 navigation controller 接在 tab bar controller 後面。

--

--

彼得潘的 iOS App Neverland
彼得潘的 Swift iOS App 開發問題解答集

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com