使用nib创建自定义视图并在窗口中使用它

时间:2011-07-11 14:05:27

标签: xcode cocoa interface-builder nib nsviewcontroller

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

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

所以我开始创建一个非常简单的例子:

  1. 在Xcode 4中,我创建了一个新的基于空白文档的Cocoa应用程序
  2. 我创建了一个新的Cocoa类,它应该从NSViewController扩展(这会导致nib与.h和.m文件一起创建。创建的.h,.m和.xib文件的名称是FaceViewController用于测试目的,它现在应该只显示文本。
  3. 我在InterfaceBuilder中打开NSViewController.xib并添加一个多行文本组件并将其放在自定义视图中,该视图已在xib文件中。我让文字跨越整个视图。
  4. MyDocument.xib我还添加了一个Custom View占位符,应该用我的自定义FaceView替换。
  5. 从这个起点开始,我尝试在我的MyDocument.xib上包含创建的View + ViewController的所有内容都失败了,我的文本应该显示的区域仍然是空的(就像底层窗口的背景一样。

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

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

    我真的认为创建这样的自定义视图会是一块蛋糕,但到目前为止却完全相反,所以任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:4)

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

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

[customView addSubview:[FaceViewController view]];

如果要替换视图

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