【问题标题】:Loading UIViewController "from" Nib File“从” Nib 文件加载 UIViewController
【发布时间】:2023-03-26 05:31:01
【问题描述】:

我正在尝试从 Nib 文件创建 UIViewController。在 Google 上,我发现我只能从 Nib 加载 UIView。

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

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

编辑: 试图像这样推送viewcontroller

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

但是推的时候还是黑屏

XCode 6.3 - 不使用情节提要

【问题讨论】:

  • 我可以从笔尖加载 UIViewControllers。你能发布你用来尝试加载的源代码吗?我也不使用故事板。
  • 我刚刚尝试创建一个 UIViewControler 并选中“也创建 Xib”复选框。并使用 self.navigationController!.pushViewController(CoolViewController(), animated: true ); 推送它

标签: ios xcode uiview uiviewcontroller xib


【解决方案1】:

试试这个,你可以用nibName:加载UIViewController

斯威夫特

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

【讨论】:

    【解决方案2】:

    你需要分配你的ViewController,然后通过告诉iOS nib的名字来初始化它。

    我看到你正在使用 Swift;恐怕我不知道swift,只知道objective-c。但这是在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 可以理解您的意思,但原则上您可以为单个 UIViewController 子类设置多个 nib。

    【讨论】:

    • 这不是首选。笔尖应该在不引用名称的情况下加载。
    • @benjaminhallock 你可以有调用方法来返回 nib 名称,一般我们将 xib 文件命名为同名。NSStringFromClass([self class])
    • @Max 不,笔尖在没有参考的情况下附加。
    • @benjaminhallock 你能展示一个不需要引用名称而是使用其他方式的教程吗?我对笔尖比较陌生。
    猜你喜欢
    • 2013-03-27
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多