2009-08-19 13 views
1

UITabBarControllerを使用して新しいiPhoneウィンドウベースのプロジェクトをセットアップし、すべてをIBで接続します。 self.tabBarController.selectedIndex = 1を使用する。プログラムでタブを切り替えることができるはずです。しかし、特定の状況下でのみ動作するように見えます。あなたがIBActionに結びつけたり、イメージピッカーの結果としてそれをうまく働かせれば。しかし、あまりにも早く呼び出すと、部分的にしか機能しないようです。ビューで選択されたタブは、まだ古いビューです。タブをプログラム的に変更するときに、iPhoneビューがUITabBarControllerで更新されない

私はself.tabBarController.selectedIndex = 1を入力しようとしました。起動時に以前に選択したタブに戻るメソッドとして、viewDidLoadのswitch文では動作しません。その後、NSTimerを追加して、01秒後にそれをやろうとしましたが、うまくいきました。明らかにタイミング/注文の問題です。

タブを切り替えるときにどのような提案をしたらよいですか?

+0

適切なコードスニペットを追加できますか?トラブルの原因を診断するのに役立つかもしれません。 – Tyler

+0

それは一貫して起こり、それ以来私は少し学んだ。私はこれで私の問題の99%を解決しました。 [self performSelector:@セレクタ(switchView :) withObject:nil afterDelay:0.0]; 少なくとも、タイマーよりも少し面倒です。これは明らかに、現在の実行ループの後まで実行を停止します。表示されているタブの同じ実行ループでビューを変更しようとすると、私はそれが表示されますから、それはちょうど幸せではありません。 UITabBarControllerで空白のiPhoneアプリケーションを作成し、self.tabBarController.selectedIndex = 1;を入力してください。たとえば、viewDidLoadまたはviewDidAppearにあります。 – jriskin

答えて

2

ウィンドウベースのプロジェクトを使い始めたので、プログラムでタブバーコントローラを作成していると仮定します。ここで問題となるのは、タブバーコントローラが初期化されると(alloc/init)、viewDidLoadが起動することです。タブバーコントローラのビューコントローラプロパティは、それ以降は設定されていないため、ビューコントローラカウントが0のときに選択したインデックスを1に設定しています。タブバーコントローラのドキュメントによれば、エラーを飲み込んで選択します

遅延が発生する理由は、選択したインデックスを設定する前にビューコントローラーを設定できるだけの遅延がある可能性があるためです。ただし、何らかの理由でView Controllerの読み込みが遅い場合は、選択されたインデックスを準備する前に設定することがあるため、危険です。

これは、タブバーコントローラがペン先からロードされている場合とは異なる動作をすることが心配です。ペン先からロードされている場合は、viewDidLoadが呼び出される前にビューコントローラが存在します。

はとにかく、あなたは基本的にUITabBarControllerをサブクラス化する必要これらのいずれか二つのオプション、持っている:

  1. をタブバーのタブバーのコントローラにビューコントローラを追加/ initWithNibName方法を初期化。次に、選択したインデックスをviewDidLoadに設定できます。
  2. setViewControllersメソッドをオーバーライドし、選択したインデックスを追加した後に設定します。

これらのオプションは試していませんが、同じ問題が発生したためです。

関連する問題