2015-05-19 78 views
15

我试图从笔尖文件创建一个UIViewController。在Google上,我发现我只能从Nib加载UIView。从“笔尖文件”加载UIViewController“

但有些人建议我可以创建一个文件所有者设置为我们的ViewController的Nib文件(UIView)。

这就是我所做的,我没有崩溃,但视图只是不显示。

编辑: 试图推viewcontroller这样

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

但它仍然显示当它被推

的XCode 6.3黑屏 - 不使用故事板

+0

我可以从nibs加载UIViewControllers。你可以发布你用来尝试加载的源代码吗?我也不使用故事板。 –

+0

我刚刚尝试创建一个UIViewControler并检查“也创建Xib”复选框。并推动它使用 self.navigationController!.pushViewController(CoolViewController(),animated:true); – JayVDiyk

回答

13

您需要分配您的ViewController,然后告诉了iOS笔尖的名称将其初始化。

我看到你在使用Swift;恐怕我不知道迅速,只是客观的。但这里是如何在Objective-C中完成:

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

...其中“CoolDesign”是您的笔尖的基本名称。也就是说,你在Interface Builder中创建CoolDesign.xib,Xcode将XML-text-xib编译成CoolDesign.nib,然后告诉initWithNibName只打开@“CoolDesign”。

仅仅告诉Interface Builder设计文档是UIViewController是不够的。虽然原则上iOS可以找出你的意思,原则上你也可以有一个子类的多个笔尖。

+0

这不是首选。笔尖应该在不引用名称的情况下加载。 – benjaminhallock

+0

@benjaminhallock你可以调用方法来返回nib名称,通常我们命名为具有相同名称的xib文件。''NSStringFromClass([self class])' – Max

+0

@Max否,该笔尖未附带引用。 – benjaminhallock

18

试试这个,你可以加载一个UIViewControllernibName:

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];