【问题标题】:How can I create view controller that is defined in XIB?如何创建在 XIB 中定义的视图控制器?
【发布时间】:2013-08-30 01:45:12
【问题描述】:

抱歉,也许是菜鸟问题,伙计们。我是 iOS 开发新手。

如何创建在 XIB 中定义的视图控制器?

当您通过“新文件”在 Xcode 中创建从 UIViewController 继承的新类并标记 with XIB 复选框时,它会创建没有 viewController 元素的 xib 文件。但它有placeholder 指向UIViewController,它在在代码中定义。

但我看到您可以在 Interface Builder 中创建控制器本身并为其指定 customClass。

不幸的是,它对我不起作用。我在运行时收到loaded the "EmbeddedViewController" nib but the view outlet was not set 错误。但我相信view 属性必须由资源加载器自动设置,因为一切都是通过 XIB 定义的。例如,它适用于 TableView 及其单元格。

能否请您举例说明如何做到这一点?

我创建了示例项目:https://github.com/cppexpert/SampleWithNib

有问题的控制器是EmbeddedViewController

【问题讨论】:

    标签: ios uiviewcontroller interface-builder ios7


    【解决方案1】:

    为每个 UIViewController 创建一个 Xib

    每个 Xib 都有 File 的 Owner 对象供您在那里设置 UIViewController 类。单击 File's Owner 并在其类上选择 EmbeddedViewController

    然后将主 UIView 而不是 UIViewController 类拖到那里,然后将此视图与文件所有者挂钩作为视图。 UIViewController 只是用来拖拽到 StoryBoard 基础项目。

    https://github.com/lequysang/gitfiles02/blob/master/SampleWithNib-master.zip

    【讨论】:

    • 谢谢!在您的文件版本中EmbeddedViewController.xib 中的viewController 元素的用途是什么?
    • 我忘记删除了。直接删了
    【解决方案2】:

    事实证明这些控件存在于 IB 中用于 Storyboard 项目。

    【讨论】:

    • 这才是真正的答案。你得出了正确的结论,而其他人只是误解了这个问题。
    【解决方案3】:

    当您通过“新文件”使用 xib 创建视图控制器时,Xcode 会生成一个 UIView 并自动将其连接到 view 出口。好像你在 Xcode 生成 xib 文件后改变了一些东西。在这种情况下,您需要手动将视图连接到 view 插座。

    【讨论】:

    • 是的,这行得通。那将是标准的 XIB Xcode 生成。但我想知道如何在不使用 File's Owner 的情况下做到这一点,而只在 XIB 中使用 viewController 元素?
    • 您不需要viewController 元素。在大多数情况下,文件的所有者是视图控制器。
    • 如果不需要,为什么我可以在 Interface Builder 中创建 viewController 呢? :)
    • 您可以像您说的那样添加视图控制器对象并指定自定义类。但是添加的视图控制器的view 插座不会自动连接到视图。所以你需要给控制器添加一个视图,并手动将其连接到插座。
    【解决方案4】:

    如果您在 xib 中创建新视图,请将文件所有者设置为您的自定义类。 或者,如果您只是想创建一个视图。 那么

    NSArray* test1 = [[NSBundle mainBundle] loadNibNamed:@"View" owner:self options:nil];
    self.myViewFromNib = [test1 objectAtIndex:0];
    

    其中 myViewFromNib 是您的视图对象,“View”是您的 nib 名称。

    【讨论】:

    • 问题是关于视图控制器,而不是关于视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 2019-12-29
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    相关资源
    最近更新 更多