質問

ご挨拶!いくつかの 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に適切に移行することを提案することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top