起動時にpresentModalViewControllerを介して1回限りのUIViewControllerを表示する
質問
ご挨拶!いくつかの UINavigationController オブジェクトとビューを備えた充実した UITabBar を含む MainView.xib
を使用する、動作するiPhoneアプリ(huzzah!)があります。 -準備完了
このミックスに1回限りの登録ビューを追加するように求められました。このビューは、アプリの起動時に UITabBar の前に表示され、ユーザーから情報を取得し、サーバーに登録します。または、既存の登録を確認してから、データを取り出します。キーチェーンで。 (キーチェーンがすでに登録の証明を示している場合、この特定のビューの表示をスキップします。)
私が管理している登録とキーチェーンの部分(後者についてはErica Sadunに感謝します!)、しかし最初の1回限りのビューは予想よりも巧妙であることが証明されています。
問題に近すぎて、何が問題なのかを確認できないと思います。パイロットエラーであり、Rube Goldbergも何も必要としないことを本当に願っています!
シナリオは次のとおりです。
アプリは MainView.xib を読み込むことで起動します。この中には、前述の UITabBar コントローラーがあります。 al。議論のために、その登録ビューを表示する必要があるとしましょう。また、モーダルな外観にしたいので、下から上に飛びます。次に、完了したら、それを却下し、デリゲート(ほとんどの場合はアプリデリゲート)を呼び出して、元の UITabBar を続行するように指示します。
// Normally, the Tab Bar Controller's view is added to the window ... still do this?
[window addSubview:tabBarController.view];
// We could now set up a VC like so. Mostly harmless. (I know, "mvc" is an unfortunate abbreviation in this case.)
RegistrationVC *mvc = [[RegistrationVC alloc] initWithNibName:@"RegistrationView" bundle:nil];
RegistrationView.xib
の内部には UIView がありますが、ナビゲーションコントローラーはありません。たとえば、登録情報を確認するためなど、Tab Barアイテムのナビゲーションコントローラーの一部として再利用できるように、分離したままにします。
進行中。モーダルに提示する目的でnavコントローラーを作成します:
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:mvc];
次に、 tab bar controller を基礎として使用してモーダルVCを提示し、割り当てられたビットを解放します。
[tabBarController presentModalViewController:nc animated:YES];
[nc release];
[mvc release];
最初の観察。何かがこれは単なるずさんなだけだと教えてくれます。モーダルビューが表示されるように、最初のタブバー項目のナビゲーションバーとビューが表示されます。さらに、選択したVCを事前にnilに設定しようとしても効果はありません。
tabBarController.selectedViewController = nil;
モーダルVCが完了する後まで、タブバーを使用することは本当に望まない/必要ありません(そして、いつそれが起こるかを知らせるためのデリゲートがあります)。
Tab Barに悩まされているのはなぜですか?まあ、そのモーダルVCの帽子を掛けるには何かが必要なようですが、他に何を使うべきかわかりません。
これが唯一の方法ですか?登録VCとタブバーを不必要につなぎ止めているようで、ただ臭いがします...間違っています。
手がかりを歓迎/感謝します!
解決
Default.pngが何を示しているか知らずにこれに答えることは困難です。 HIGをたどっていて空のtabBarControllerが表示されていると仮定すると、やや複雑な階層化をお勧めします。 底面図:tabBarController.view 中央ビュー:UIImageView:Default.png トップビュー:画面の下部に配置された登録ビュー
起動時に登録ビューを表示する必要がある場合は、手動で上方向にアニメーション化し、アニメーションが完了したらその下のUIImageViewを削除します。登録が完了したら、登録ビューを手動で下方向にアニメートしてtabBarControllerを表示します。起動時に登録ビューが必要ない場合は、UIImageViewをアニメートしてフェードアウトします(または単に削除します)。
OTOHハンド。HIGをフォローしておらず、代わりに何らかのスプラッシュスクリーンを表示している場合は、少し簡単になります。このようなレイヤー: 底面図:tabBarController.view トップビュー:UIImageView:Default.png
登録を表示する必要がある場合は、animated:NOでpresentModalViewControllerを実行し、UIImageViewをフェードアウトします。そうでない場合は、UIImageViewをフェードアウトします。
これは写真なしの長い説明です。顕著な点は、アプリの起動時に最初に表示されるUIImageView:Default.pngを追加し、それを使用して登録またはtabBarControllerに適切に移行することを提案することです。