甘いものが好きです

iOS App開発時に感じた疑問や課題、その他の雑感などを書いていきます。

iOS Appではタブ選択時には対応するViewControllerのRootViewを表示すべき?

UITabBarControllerの各タブにNavigationベースのViewを対応づけておく場合、実装方法によっては、あるタブに対応するViewで階層を掘り下げて表示している状態でタブを切り替えてからまた元のタブに戻したときに、下の階層が表示されたままになってしまう。複数のタブ間で共通のデータを編集する際に、このような実装方法では表示内容とデータ内容の一致を保証できない。

Appleの「UITabBarController Class Reference」を読んでいたら、タブ選択時の動作について次のような記載があった。

When the user selects a specific tab, the tab bar controller displays the root view of the corresponding view controller, replacing any previous views. (User taps always display the root view of the tab, regardless of which tab was previously selected. This is true even if the tab was already selected.)

この記載内容に従うならば、TabBar上でタブを選択した時(表示中のタブを再選択した時を含む)には、対応するViewControllerのRootViewを表示すべきだということになる。実際に、iPhoneの標準のミュージックプレイヤーの曲選択画面では、そのような実装になっている。(App Storeの画面ではタブを切り替えてもRootViewに戻らないが。)表示とデータの内容を一致させるためにも、この方針を採用するのが無難だと思う。

追記

タブ選択時に選択されたタブに対応するViewControllerのRootViewを表示するための具体的な方法を次の記事に記載した。
タブ選択時に選択されたタブに対応するViewControllerのRootViewを表示する - 甘いものが好きです