【问题标题】:Create a custom view using a nib and use it in a window使用 nib 创建自定义视图并在窗口中使用
【发布时间】:2011-10-02 20:09:30
【问题描述】:

我一直在努力解决这个问题,但我似乎无法自己解决。

情况是这样的: 我想要一个自定义的基于 Nib 的视图,它有自己的 ViewController。然后我想将此视图添加到窗口中。因此窗口应该包含我的自定义视图。

所以我开始创建一个非常简单的示例,如下所示:

  1. 在 Xcode 4 中,我创建了一个新的基于空白文档的 Cocoa 应用程序
  2. 我创建了一个新的 Cocoa 类,它应该从 NSViewController 扩展(这会导致 nib 与 .h 和 .m 文件一起创建。创建的 .h、.m 和 .xib 文件的名称是 @ 987654322@ 出于测试目的,它现在应该只显示文本。
  3. 我在InterfaceBuilder 中打开NSViewController.xib 并添加一个多行文本组件并将其放置在自定义视图中,该视图已在xib 文件中。我让文本跨越整个视图。
  4. MyDocument.xib 中,我还添加了一个 Custom View 占位符,它应该替换为我的自定义 FaceView。

从这个起点开始,我尝试在MyDocument.xib 上包含创建的 View + ViewController 的所有操作都失败了,应该显示我的文本的区域仍然是空的(就像底层窗口的背景一样。

所以我的问题确实是我需要做的,以便我的 FaceView 被加载到我放置在 MyDocument.xib 上的自定义视图中。以下是我不清楚的一些事情:

  • 自定义视图从NSView 扩展,所以我想将其更改为我的FaceView,但视图不作为类存在,而是在xib 的InterfaceBuilder 中定义,我是否需要将其设置为@987654329 以外的任何内容@?
  • 我必须在代码中分配、初始化 FaceViewController 还是将其拖入我的两个 .xib 中的任何一个中就足够了?
  • 我可以使用 InterfaceBuilder 来放置我的 FaceView 还是必须以编程方式进行?

我真的认为创建这样的自定义视图会是小菜一碟,但到目前为止结果恰恰相反,因此我们将不胜感激。

【问题讨论】:

    标签: xcode cocoa interface-builder nib nsviewcontroller


    【解决方案1】:

    您可以通过向 MyDocument.xib 添加一个或使用 alloc、init 创建 FaceViewController 来创建您的 FaceViewController。

    要放置 FaceView,您必须以编程方式进行,您可以使用

    [customView addSubview:[FaceViewController view]];
    

    如果你想替换视图

    [customView replaceSubview:oldView with:[FaceViewController view]];
    

    【讨论】:

    • 太棒了! [customView addSubview:[FaceViewController view]]; 成功了。
    • 你好@Besi,你到底是怎么做到的?我就是这样,但仍然不能让 customView 显示我自己的 NSViewController 类视图?谢谢
    • Ups,对不起,我现在开始工作了。我将 addSubView 方法移动到 windowDidLoad :) 但是,为什么会发生这种情况 :) thaaanks
    • 这对我很有用,直到我尝试使用自动布局。请记住,如果您的 customView 具有与 oldView 相关的 Auto Layout 约束,那么当您替换 oldView 时,它们都会消失。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多