2015-05-19 15 views
15

Ich versuche, eine UIViewController aus einer Nib-Datei zu erstellen. Bei Google habe ich festgestellt, dass ich nur eine UIView von Nib laden kann.Loading UIViewController "von" Nib-Datei

Aber einige schlägt vor, dass ich eine Nib-Datei (von UIView) erstellen könnte, deren Dateieigner auf ViewController gesetzt ist.

Das habe ich gemacht, ich habe keine Abstürze, aber die Ansicht wird einfach nicht angezeigt.

EDIT: Versucht das viewcontroller wie diese

self.navigationController!.pushViewController(CoolViewController(), animated: true); 

Aber es immer noch zeigt schwarzen Bildschirm zu schieben, wenn es

XCode 6.3 gedrückt wird - Nicht Storyboards mit

+0

Ich kann UIViewControllers von Nibs laden. Könnten Sie den Quellcode posten, den Sie verwenden, um das Laden zu versuchen? Ich verwende auch keine Storyboards. –

+0

Ich habe gerade versucht, einen UIViewControler zu erstellen und das Kontrollkästchen "Auch Xib erstellen" zu aktivieren. Und drücken Sie es mit self.navigationController! .pushViewController (CoolViewController(), animiert: true); – JayVDiyk

Antwort

13

Sie benötigen ViewController zuweisen, dann initialisieren, indem die iOS den Namen der Spitze zu erzählen.

Ich sehe, Sie verwenden Swift; Ich fürchte, ich weiß nicht schnell, nur objektiv-c. Aber hier ist, wie wäre es in Objective-C erfolgen:

[self.navigationController pushViewController [[[CoolViewController alloc] initWithNibName: @"CoolDesign" bundle: nil] autorelease]; 

... wo „Cooldesign“ ist der Basisname Ihrer Feder. Das heißt, Sie erstellen CoolDesign.xib im Interface Builder, Xcode kompiliert den XML - Text - xib in CoolDesign.nib, dann sagen Sie initWithNibName, nur @ CoolDesign zu öffnen.

Es ist nicht genug, dem Interface Builder mitzuteilen, dass ein Designdokument ein UIViewController ist. Während das iOS im Prinzip herausfinden könnte, was Sie meinen, könnten Sie prinzipiell auch mehrere Schreibfedern für eine einzige UIViewController Unterklasse haben.

+0

Dies ist nicht bevorzugt. Die Schreibfeder sollte geladen werden, ohne auf den Namen zu verweisen. – benjaminhallock

+0

@benjaminhallock Sie können Call-Methode haben, um den Nib-Namen zurückzugeben im Allgemeinen nennen wir die XIB-Datei mit dem gleichen Namen.'NSStringFromClass ([Selbstklasse]) ' – Max

+0

@Max Nein, die Feder ist ohne Bezug angehängt. – benjaminhallock

18

dies versuchen, können Sie lade ein UIViewController mit nibName:

Swift

self.navigationController!.pushViewController(CoolViewController(nibName: "CoolViewControllerNibName", bundle: nil), animated: true);

Objective-C

CoolViewController*coolViewCtrlObj=[[CoolViewController alloc] initWithNibName:@"CoolViewControllerNibName" bundle:nil]; 
[self.navigationController pushViewController:coolViewCtrlObj animated:YES];