2011-06-28 8 views
3

私はログイン画面から始めます。その後、ユーザーがログインすると、UITabBArControllerを含むViewControllerがロードされます。問題はviewdidAppearです:tabBarControllerの個々のviewControllerのいずれに対しても呼び出されません。UIViewController = viewDidAppear内のUITabBarController:

私はこれが最高のプログラミング練習ではないと感じていますので、コードの構造を改善する方法や問題を解決する方法はありますか?

+0

これはうまくいくようですが、タブバーを制御するviewControllerで使用するコードを投稿できますか? –

+0

タブコントローラをビューコントローラの「内側」にどのように追加しますか? –

答えて

3

ここでの問題は、UIViewControllerとUITabBarControllerの誤った使用に起因すると思います。

UITabBarControllerは、複数のView Controllerのコンテナとして存在します。おそらくそれ自体は含まれてはいけません。これは、ビューコントローラ階層の最上部に位置するように設計されています。だからステップ1はおそらくあなたのアプリケーションを再配置して、UITabBarControllerが他の何ものの下にもなくなるようにし、それがあなたをまっすぐにするかどうかを見ます。

その後、ログインビューを表示するslevのアプローチは正しいもののように聞こえます。

+0

あなたはモーダルでタブバーコントローラーを提示できなければなりませんが、ICBW ... –

+0

iOS5では、UITabBarControllerなどのコンテナとして機能するようにUIビューコントローラーをカスタマイズするためのAPIサポートが想定されています。 – pulkitsinghal

+0

申し訳ありませんが、これは正しくありません。 UITabBarControllerはネストすることができます。独自のメソッドをオーバーライドする場合は、[super viewWillAppear]を呼び出すようにしてください。 – Teddy

2

なぜ、TabBarControllerベースのアプリを作成していないのですか?アプリの起動時に即座にモーダル画面を呼び出します(ログイン用)。ログインが完了したら、TabBarControllerをキーウィンドウにするためにログインを外してください。

+0

これを手伝ってくれる機会はありますか? http://stackoverflow.com/questions/6509078/dismissing-uipickerview-with-done-button-uitoolbar-help – Legolas

+0

@Legolas。うん、おい、確かに。私は以前それを見ていたし、他の人がすでに正しい答えを持っていると思ったが、それはあなたにその例外エラーを与えるだろうか分からなかった – justin

+0

私は基本的に2つのpickerviewsがあります。 1つのDatePickerViewと3つのコンポーネントを持つ別のPickerView。 textFieldをクリックするとそれらが表示されます。辞任のために、私は '[textField resignFirstResponder]'を使います。これはDatePickerViewでは動作しますが、他のpickerview(エラーをスローする)では動作しません – Legolas

0

subviewcontrollerでviewdidAppearを手動で呼び出そうとするとよいでしょう。それはrootviewcontrollerで呼び出されたときにサブビューコントローラーのものを手動で呼び出すときです。

+1

ここはドラゴンです。 –

3

私は問題を抱えていた私も、私は呼び出さずviewDidAppearをオーバーライドしているUITabBarControlerサブクラスだったので、[スーパーviewDidAppear:...]これを呼び出した後

、viewDidAppearは、サブビューコントローラ内部でも呼ばれていました。

+0

私にとっても同じ問題です - メソッドの最初の行に[super viewDidSomething]を残しておき、下にコードを追加するのがベストプラクティスと考えられますね。したがって、ベースコールを放棄すると、コール階層内の何かが混乱する可能性がありますか?誰かがこれにコメントする気はありますか? – Miros

関連する問題