4

私は多くのオプションを試しましたが、どれも機能しません。問題は単純です:

5つのタブで完全に機能するUITabBarControllerが1つあります。

私の問題は1番目と2番目のタブにあります。各タブで同じViewControllerを使用する必要がありますが、もちろん2つの異なるインスタンスがあります。

ルートコントローラーと同じビューコントローラーを指す2つの異なるナビゲーションコントローラーを追加しようとしました。このようにして、各ナビゲーションコントローラーのタブテキストとアイコン(主にインターフェイスビルダーで作業します)をカスタマイズできます。

              __ NavController 1 _
             /                    \
TabController -- NavController 2 -- ViewController

この構成では、最初のタブ(NavController1によって処理されるタブ)のみが機能し、2番目のタブはビューを表示しません(どのビューが表示されるかは絶対にわかりませんが、空の黒で、デフォルトの空の青いナビゲーションバーがあります) 。次のように、ナビゲーションコントローラーからビューコントローラーへのリンクを1つだけ保持する場合:

             __ NavController 1 
             /                    
TabController -- NavController 2 -- ViewController

2番目のタブは完全に機能します!

もう1つのオプションは、NavControllerを2回リンクすることですが、この場合、タブインデックスに応じてプログラムでタイトルと画像を構成する必要があり、これを行う場所がわかりません。

それで :

  • これは正常な動作ですか?
  • IBの解決策はありますか?
  • プログラムでタブの外観を設定する必要がある場合、どこでこれを行う必要がありますか?
4

2 に答える 2

1

プログラムで実行する場合は、アプリデリゲートでこれと同様のコードを使用できます。

UITabBarController *tbc = [[UITabBarController alloc] init];


MyViewController *mvc1 = [[MyViewController alloc] init];
MyViewController *mvc2 = [[MyViewController alloc] init];
mvc1.title=@"One";
mvc2.title=@"Two";
mvc1.tabBarItem.image=[UIImage imageNamed:@"one.png"];
mvc2.tabBarItem.image=[UIImage imageNamed:@"two.png"];


UINavigationController *nc1 = [[UINavigationController alloc] initWithRootViewController:mvc1];
UINavigationController *nc2 = [[UINavigationController alloc] initWithRootViewController:mvc2];


[tbc setViewControllers:[NSArray arrayWithObjects:nc1,nc2, nil]];


self.window.rootViewController = tbc;
于 2013-01-07T19:38:12.953 に答える
1

IBでこれを行うことができるはずです。2つのタブのベースコントローラーとして2つのナビゲーションコントローラーを追加し、それぞれにルートビューコントローラーを追加し(質問で示したようなものだけではありません)、それらのルートビューコントローラーのクラスをサブクラスに変更します。

編集後

ルートビューコントローラの1つとして作成した複雑なシーンがある場合は、それをコピーして貼り付けることができます。別のシーンがIBウィンドウの左側のオブジェクトリストに表示されます(ただし、キャンバスにも表示されますが、他のものの真上にあるので、それを表示するにはドラッグする必要があります)。2番目のナビゲーションコントローラーを接続できます。そのようにするか、2つの異なるUIViewControllerをドラッグして、両方をサブクラスに変更することができます(2つの異なるインスタンスに異なる外観のインターフェイスが必要な場合)。

于 2013-01-07T19:53:59.850 に答える