あなたのコメントを読んだ後、私は疑問に思っています...あなたのアプリの構造が論理的にタブ付きのアプリ構造である場合(実際にあなたはそれを「タブバーアプリケーション」と呼んでいます)、あなたはUITabViewControllerの代わりにUITabViewControllerを使用することを検討すべきではありませんNavigationController?結局のところ、それはそれが行うように設計されていることです。
TabViewControllerを使用する場合は、フリップアニメーションの必要性を再検討する必要があります。これは、タブのUIに意味がないためです。フリップアニメーションを省くことができれば、TabViewControllerが良い方法である可能性があり、アイデアを却下する前に、少なくともそれを試してみる必要があります。また、成長するように設計されています...タブバーに任意の数のタブを組み込むことができます。アップルのドキュメントをチェックしてください(写真付き!)
タブが画面の下部にあるのに対し、「タブ」navControllerボタンは画面上部のナビゲーションバーにあることに気付くでしょう。これは、アプリの成長に合わせて役立ちます。これは、UIデザインの観点から、プログラム的に、navControllerを個々のタブ内のナビゲーションツールとして組み込むのが簡単だからです。たとえば、マップ/リストフリップルーチンがアプリのこの部分に実際に意味がある場合は、これを単一のタブ(独自のnavigationController内)として保持し、アプリの他の部分に他のタブを追加できます...
update
あなたのコメントから、あなたはnavController-inside-tabBarControllerのセットアップに興味があると言っています。この場合、フリップトランジションを取得し、戻るボタンを取得しない方法がいくつかあります。
(1)モーダル表示
必要なものを取得する最も簡単な方法は、viewControllerの1つ(マップビューなど)を設定して、もう1つ(リストビュー)をモーダルで表示することです。
ストーリーボードの場合:
- 写真のようにlistViewに移動するためのナビゲーションバーボタンを備えたnavControllerにmapViewControllerを埋め込みます
- listViewControllerをストーリーボードに追加し、それを独自のnavContoller(mapViewControllerのnavControllerではない)に埋め込みます。barButtonItemをこのnavControllerにドラッグし、listViewControllerのIBActionに接続します。
- Ctrlキーを押しながらmapViewControllerの「list」ボタンからlistViewControllerにドラッグして、セグエを作成します。セグエを選択し、属性インスペクターでセグエタイプを「モーダル」に設定し、トランジション「水平方向に反転」と「アニメーション」をチェックします。コードで参照する場合に備えて、名前を付けてください。
- listViewControllerのIBActionに次を追加します。
[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
それはあなたの結果を達成するはずです。完了ブロックを使用して、リストビューからマップビューに情報を送り返したり、マップビューをlistViewのデリゲートとして設定したりできます。
ストーリーボードを使用していない場合は、このアップルガイドを確認してください
他のViewControllerからの
ViewControllerの提示、特に「ViewControllerの提示と遷移スタイルの選択」。
このアプローチには1つの落とし穴があります。提示されたビューが画面に反転すると、タブバーを含む前のビュー全体が邪魔にならないように反転します。これは、ユーザーがアプリで他のことを行う前に閉じる必要があるモーダルビューであるという考え方です。
(2)単一のnavControllerでのプッシュ/ポップ これが意図に合わない場合は、ビューのプッシュとポップを備えた単一のNavigationControllerを使用してナビゲートでき、戻るボタンを非表示にできます...しかし、実際には新しいマップビューではなく、mapViewに戻りたい場合の戻るボタン機能。
戻るボタンを非表示にするには、次のことを試してください。
self.navigationItem.hidesBackButton = YES
最上部のviewControllersでviewDidLoad
次に、この種のIBActionを使用して、xib/storyboardにbarButtonItemを追加できます。
[self popViewControllerAnimated:NO]
また
[self popToRootViewControllerAnimated:NO]
UINavigationControllerの組み込みとしてサポートされていないため、コードでフリップアニメーションを作成する必要があります(読者の練習問題として残しておくことをお勧めします)。
(3)単一のviewControllerでビューを交換する ghettopiaが示唆しているように、navController内で(または手動で配置したnavBarを使用して)単一のviewControllerを使用し、UIViewクラスメソッドを使用して2つのビューを交換できます
transitionFromView:toView:duration:options:animations:completion
transitionWithView:duration:options:animations:completion
。
リストとマップは基本的に同じデータモデルの2つのビューであるため、これは優れた単純化ソリューションになる可能性があります。