0

ご挨拶!私は、いくつかのUINavigationControllerオブジェクトとビューを備えMainView.xibた完全にストックされたUITabBarを使用する動作中の iPhone アプリ (ハザー!) を持っています。

このミックスに 1 回限りの登録ビューを追加するように依頼されました。このビューは、アプリの起動時にUITabBarのに表示され、ユーザーから情報を取得し、サーバーに登録するか、既存の登録を確認してから、キーチェーン内のデータを削除します。(キーチェーンがすでに登録の証明を示している場合は、この特定のビューの表示をスキップします。)

登録とキーチェーンの部分は私が管理しています (後者については Erica Sadun に感謝します! )。

問題に近づきすぎて、何が問題なのかがわからないのではないかと思います。パイロットのエラーで、何も必要ないことを願っています。Rube Goldberg!

シナリオは次のとおりです。

アプリは、前述のUITabBarコントローラーなどがあるMainView.xibをロードすることから開始します。アル。議論のために、その登録ビューを表示する必要があるとしましょう。また、モーダルな外観にしたいので、下から上に飛んでいきます。次に、完了したら、それを閉じて、デリゲート (ほとんどの場合 App Delegate) を呼び出し、元の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];

内部にUIViewがありますが、nav コントローラーがないことに注意しRegistrationView.xibてください。たとえば、タブ バー アイテムのナビゲーション コントローラーの一部として (たとえば、登録情報を確認するために) 再利用できるように、分離したままにしておきたいと考えています。

先に進みます。物事をモーダルに提示する目的で nav コントローラーを作成します。

UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:mvc];

次に、タブ バー コントローラーをベースとしてモーダル VC を提示し、割り当てられたビットを解放します。

[tabBarController presentModalViewController:nc animated:YES];
[nc release];
[mvc release];

最初の観察。これは単なるずさんなものだと何かが教えてくれます。最初のタブ バー アイテムのナビゲーション バーとビューが、モーダル ビューが急降下するのと同じように表示されることがわかります。さらに、選択した VC を事前に nil に設定しようとしても効果はありません。

 tabBarController.selectedViewController = nil;

モーダルVCが完了するまで、タブバーを使用したくない/使用する必要はありません(そして、それがいつ起こるかを知らせるデリゲートがあります)。

なぜ私はタブバーに悩まされているのですか? うーん、そのモーダル VC の帽子をかぶる何かが必要なようですが、他に何を使うべきかわかりません。

これが唯一の方法ですか?登録 VC とタブ バーを不必要に繋いでいるように見えます。

手がかりは歓迎/感謝します!

4

1 に答える 1

1

Default.png が何を示しているかを知らずにこれに答えるのは難しいです。HIG に従っていて、空の tabBarController が表示されていると仮定すると、やや複雑なレイヤリングをお勧めします。

起動時に、登録ビューを表示する必要がある場合は、手動で上向きにアニメーション化し、アニメーションが完了したら、その下の UIImageView を削除します。登録が完了したら、手動で登録ビューを下向きにアニメートして、tabBarController を表示します。起動時に登録ビューが必要ない場合は、UIImageView をアニメーション化してフェードアウト (または削除) します。

OTOHハンド、HIGに従っておらず、代わりにある種のスプラッシュスクリーンを表示している場合、物事は少し簡単になります. このようなレイヤー: 下のビュー: tabBarController.view トップ ビュー: UIImageView: Default.png

登録を表示する必要がある場合は、presentModalViewController をanimated:NO で実行してから、UIImageView をフェードアウトします。そうでない場合は、UIImageView をフェードアウトします。

写真なしの長い説明ですが、理解していただければ幸いです。重要な点は、UIImageView:Default.png をアプリの起動時に最初に表示されるように追加し、それを使用して、必要に応じて登録または tabBarController への移行をガイドすることを提案していることです。

于 2009-10-28T20:09:36.177 に答える