如何将nib自定义视图绑定到NSVIew子类

时间:2011-11-01 14:51:53

标签: objective-c cocoa osx-snow-leopard nsview nsviewcontroller

我有一个简单的要求。 点击+按钮,我正在尝试向SplitView添加自定义视图。

我创建了一个MyCustomView类,它是NSView的子类

在应用程序nib文件中,我有一个自定义视图,其中包含按钮等。

现在如何每次都分配一个新的MyCustomView?

有这样做的例子吗?

我希望像

这样的东西
MyCustomView *v1 = [[MyCustomView alloc] init];

..
..
[splitView addSubView:v1];
[splitView addSubView:v2];

...

请帮忙

1 个答案:

答案 0 :(得分:3)

根据您的描述很难确切地说出您所描述的内容,但让我们看看我是否了解您。您希望每次单击“+”时将自定义视图程序集的“副本”添加到拆分视图中,对吗?

执行此操作的绝对最佳方法是将要复制的自定义视图程序集(“原型”)放在其自己的xib中。对于您想要表示的每个对象,您将从xib实例化一个新副本并将其提供给某个所有者,然后将其添加到某个父视图(在您的情况下为一个拆分视图...奇怪的是无限数量的视图,但我没有足够的细节说不然。)

因此。在现代的Cocoa世界中,这样的视图程序集应该有自己的视图控制器(NSViewController)。这使得事情变得更容易,因为xib的文件所有者将是你的MyCustomViewController的一个实例,其-view连接到xib中的主容器视图(你的自定义视图及其所有子视图),其-representedObject被设置为任何模型自定义视图所代表的对象。然后,您的应用程序将维护模型对象的所有视图控制器的列表(可能是数组或字典)。请参阅this SO question/answer了解如何从nibs / xib加载。

这基本上是NSCollectionView的工作原理(尽管视图大小必须相同 - 可能不适合你)。在这种情况下,集合视图对应于拆分视图; NSCollectionViewItem对应于你的MyCustomViewController(实际上在10.5及以上的NSCollectionViewItem是NSViewController的子类);您的自定义视图是集合视图项的主视图。对于其集合中的每个模型对象,它实例化一个NSCollectionViewItem并从xib加载视图原型(理想情况下,但这是可选的),并使用它来设置项目的视图,然后设置项目的表示对象(模型对象)

我希望这会澄清一些事情。你有一些阅读要做,以便了解足够的细节,但如果你仍然卡住,你可能会尝试编辑你的问题,以澄清或打开一个新的,更具体的问题。