2012-03-30 17 views
3

インタフェースビルダーでラベルやテキストをIBOutletsとして作成しました。私はストーリーボードで定義した別のビューから、このスクリーンを完全に見ることができます。 しかし、別のXIBとそのビューにアクセスしたい関連するUIViewControllerがあります。私のXIBはストーリーボードにはないので、私はそれにセグをすることはできません。代わりにプログラムでトランジションを実行する必要があります。iOS - Interface Builderアウトレットが初期化されていません

PlantDetailViewController *plantDetailVC = [[PlantDetailViewController alloc] init]; 
    [self.currentNavigationController pushViewController:plantDetailVC animated:YES]; 

このコードを実行すると、ビューに遷移しますが、ビューは空白になります。私はコードをデバッグし、それはviewDidLoadとviewWillAppearを入力しますが、私のIBOutletsはすべてNILです....スクリーン上に何も表示されません!

NILの理由と初期化方法を教えてもらえますか?

おかげ

ブライアン

答えて

0

-initあなたはペン先の命名規則を使用している場合-initWithNibName:bundle:

ロードするnilを渡すことができペン先の使用をロードしたい場合は、あなたのためのnibファイルをロードしません。あなたのクラスとデフォルトのバンドルに一致する名前、つまり[[PlantDetailViewController alloc] initWithNibName:nil bundle:nil]の詳細は、-nibNameのドキュメントを参照してください。

+0

感謝を。しかし、私はロードしようとしているビューのNIBを持っていません。ビューはストーリーボードに定義されており、ストーリーボードにはNIBファイルがないことがわかっています。もし私が間違っていれば、私にコアキャットしてください。 –

+2

'UIViewController'の' init'メソッドを呼び出すことは、 'initWithNibName:nil bundle:nil'を呼び出すことと同じです。ビューコントローラのクラスと同じ名前(または最後に 'Controller'という単語がない同じ名前)のペン先がある場合、ビューコントローラはそのペン先を' loadView'にロードします。 –

2

あなたのストーリーボードにPlantDetailViewControllerが設定されていて、ストーリーボードの外に作成されたOtherViewControllerがあると思われます。今度は、OtherViewControllerがあなたのストーリーボードに設定されたPlantDetailViewControllerのインスタンスを作成します。

あなたのストーリーボードの名前はMainStoryboard.storyboardとしましょう。

まず、ストーリーボードにPlantDetailViewControllerのIDを設定する必要があります。これは、属性インスペクタのView Controllerセクションで行います。 PlantDetailに設定したとします。

その後、OtherViewControllerでは、この作業をする必要があります:応答ヨナのため

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
PlantDetailViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"PlantDetail"]; 
[self.currentNavigationController pushViewController:vc animated:YES]; 
関連する問題