1

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

self.tabBarController.selectedIndex = 1; を入れてみました。起動時に以前に選択したタブに戻る方法としてviewDidLoadのswitchステートメントで使用すると、機能しません。次に NSTimer を追加し、.01 秒後にそれを実行しようとしましたが、正常に動作するため、明らかにタイミング/順序付けの問題です。

タブを切り替えるタイミングを明確にする必要がある場合の提案はありますか?

4

1 に答える 1

2

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

遅延で動作する理由は、選択したインデックスを設定する前にビューコントローラーを設定できるように、おそらく遅延が十分に長いためです。ただし、何らかの理由で View Controller の読み込みが遅い場合、準備が整う前に選択したインデックスを設定している可能性があるため、これは危険です。

タブ バー コントローラーが nib からロードされた場合とは異なる動作をするのはイライラします。nib からロードされた場合、View Controller は viewDidLoad が呼び出される前に存在します。

とにかく、基本的に 2 つのオプションがあり、どちらも UITabBarController をサブクラス化する必要があります。

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

これらのオプションのいずれも試していませんが、同じ問題に遭遇したため試してみます。

于 2009-10-19T22:43:01.697 に答える