2012-03-30 17 views
3

Ich habe eine Sicht in Interface Builder mit einigen Beschriftungen und Text als IBOutlets erstellt. Ich kann diesen Bildschirm perfekt sehen, wenn ich ihn von einer anderen Ansicht aus betrachte, die ich in meinem Storyboard definiert habe. Ich habe jedoch eine andere XIB und einen zugeordneten UIViewController, auf die ich von dieser Ansicht zugreifen möchte. Da mein XIB nicht im Storyboard ist, kann ich nicht darüber hinwegsehen. Stattdessen muss ich den Übergang programmgesteuert ausführen.iOS - Interface Builder Outlets nicht initialisiert

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

Wenn dieser Code ausgeführt wird, wechselt er in die Ansicht, aber die Ansicht ist leer. Ich habe den Code debugged und es kommt in ViewDidLoad und viewWillAppear aber alle meine IBOutlets sind NIL .... so nichts es auf dem Bildschirm angezeigt wird!

Kann mir jemand sagen, warum sie NIL sein könnten und wie ich sie initialisieren kann?

Dank

Brian

Antwort

0

-init eine Nib-Datei für Sie nicht geladen werden, wenn Sie eine Feder Verwendung -initWithNibName:bundle:

laden möchten Wenn Sie nib Namenskonventionen verwenden Sie nil passieren zu laden Eine Schreibfeder, deren Name mit Ihrer Klasse und dem Standardpaket übereinstimmt, zB [[PlantDetailViewController alloc] initWithNibName:nil bundle:nil], finden Sie in der Dokumentation für -nibName für Details.

+0

Danke für die Antwort Jona. Jedoch habe ich keine NIB für die Ansicht, die ich versuche zu laden. Die Ansicht ist in einem Storyboard definiert und von dem, was ich verstehe, gibt es keine NIB-Dateien im Storyboard. Korrigiere mich, wenn ich mich irre. –

+2

Der Aufruf der 'init'-Methode von' UIViewController' ist identisch mit dem Aufruf von 'initWithNibName: nil bundle: nil'. Wenn es eine Nib mit demselben Namen wie die Klasse des View-Controllers gibt (oder denselben Namen ohne das Wort "Controller" am Ende), lädt der View-Controller diese Nib in 'loadView'. –

2

Es klingt wie Sie sagen, Sie haben eine PlantDetailViewController in Ihrem Storyboard eingerichtet, und einige OtherViewController, die außerhalb Ihres Storyboards erstellt wurde. Jetzt möchten Sie OtherViewController, um die PlantDetailViewController instanziieren, die in Ihrem Storyboard eingerichtet wurde.

Angenommen, Ihr Storyboard heißt MainStoryboard.storyboard.

Zuerst müssen Sie die Kennung des PlantDetailViewController in Ihrem Storyboard festlegen. Dies tun Sie im Inspektor Attribute unter dem Abschnitt View-Controller. Nehmen wir an, Sie setzen es auf PlantDetail.

Dann in OtherViewController, sollte diese Arbeit:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
PlantDetailViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"PlantDetail"]; 
[self.currentNavigationController pushViewController:vc animated:YES]; 
Verwandte Themen