2009-05-19 3 views
4

私は原因を見つけたと思います:IBのドキュメント情報ウィンドウに警告があります:「選択されたナビゲーションコントローラ(Second)」のnib nameプロパティが 'SecondView.nib'このビューコントローラは、このようにビューを設定することを意図していません。UITabBarControllerによって別のnibからUINavigationControllerを自動的にロードする

バマー。


私はトップレベルとUINavigationController sの間のスイッチでUITabBarControllerを持ってInterface Builderでペン先を構築しました。

すべてが単一nibファイル内にあるとき、それは正常に動作しますが、私はUINavigationControllerのための別々のnibファイルを使用したいと思います。

私はちょうどUINavigationControllerにSecondViewのクラスを変更した場合、それはすべての休憩、AppleのTabBarのテンプレートを皮切り:

second nib

と私が得るすべてはこれです:

// imgur has lost the image, sorry // 

はそれが可能ですプログラムですべてを設定せずにUINavigationControllerの別ファイルを使用するにはどうすればよいですか?

TabBarControllerは、ニブのロードとアンロードを処理したいと思います。

+0

ねえ、ここにはスクリーンショットの代わりにいくつかの個人的な写真があります。あなたは修正していただけますか? :) –

答えて

5

UINavigationControllerをFirstViewControllerと入れ替えるだけです。

だから、階層は次のようにする必要があります:

Tab bar controller 
-----Tab bar 
-----Navigation Controller 
----------First View Controller 
---------------Navigation Item 
----------Tab bar item (First) 
-----Navigation Controller 
----------Second View Controller 
---------------Navigation Item 
----------Tab bar item (Second) 

あなたが別々のファイルにそれらを分割しようとしているので(実際のビューオブジェクトを含むnibファイルへのインスペクタで最初のビューコントローラのペン先を設定しますこれは良いことです)。

このタブには、First View Controllerをルートビューとしてロードするナビゲーションコントローラがあります。

完了。

1

私はあなたがこのようなものを探していると信じています。 "whatever"を2番目のnibファイルの名前に置き換えます。

newNavController = [[UINavigationController alloc] initWithNibName:@"whatever" bundle:[NSBundle mainBundle]]; 
+0

私は、プログラムでnibsを読み込み、初期化、解放することを避けたいと思っています。 UITabBarControllerはそれを自動的に行います(普通のUIViewControllerの場合は...) – Kornel

5

私はIB経由でUINavigationControllerを設定しようとしませんでした。私は複数の画面を持って、それぞれ別のxibに格納され、UIViewControllerを継承する対応するクラスがあります。 applicationDidFinishLaunchingでは、xibを使用してUIViewControllerを初期化しますが、手動でUINavigationControllerを作成し、ナビゲーションコントローラのビューをウィンドウに追加し、ナビゲーションコントローラに最初のビューをプッシュします。

これが役立つかどうかはわかりません。 FirstViewController上記

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    navigationController = [[UINavigationController alloc] init]; 

    FirstViewController * viewController = [[FirstViewController alloc] 
              initWithNibName:@"FirstView" 
                bundle:nil]; 
    [navigationController pushViewController:viewController animated:NO]; 
    [viewController release]; 
    [window addSubview:navigationController.view]; 
    [window makeKeyAndVisible]; 
} 

はあなたのクラス(例えば、ここではFirstViewController)へのファイルの所有者のクラスを設定し、その後、あなたのビューを作成し、UIViewののビューへのファイルの所有者ビューを接続するIBで、のUIViewControllerを拡張します。

1

最初にUITabBarItemの下にUITabBarControllerの代わりにのナビゲーションコントローラが表示されているようです。それはあなたの問題の一部かもしれません。

第2に、IBにUITabBarControllerを追加し、トップレベルオブジェクトのリスト(最初のスクリーンショット)でそのアイコンをクリックすると、属性インスペクタでは、それぞれのビューコントローラのタイプを変更できますタブ。必要に応じて、これを使用してナビゲーションコントローラーにすべて変更することができます。また、カスタムビューをロードして他のペンからコントローラを表示したいので、アトリビュートインスペクタの下部にある「View Controller」セクションを見ると、プロジェクトのペン先を選択してビューをロードすることができます。 nibの "File's Owner"があなたのUINavigationControllerサブクラスに設定されていると仮定すると、それはうまくいくはずです。

このすべては、大量のコーディング作業を必要としません。あなたがこれらのパネルを見つけることができない場合に私が話していることのスクリーンショットを希望したら教えてください。

+0

UITabBarItemsを直接UITabBarControllerの下に移動することはできません。これはIBで新しいコントローラを作成します。 私はUITabViewsインスペクタのコントローラのタイプを修正しました。これは動作しないというIBの警告です。 – Kornel

0

私は同じ警告を見つけました。私はすべてのビューコントローラを別々のxibファイルに保存しました。私は.nibの名前を削除し、それを空にして、それを取り除きました。

関連する問題