0

我有一个列表视图类,就像 NSCollectionView 一样,需要一个额外的原型项目和一个原型视图才能使用。在 Interface Builder 中从库中删除 NSCollectionView 时,会自动创建这两个帮助项。但是我找不到一个处理这个用例的官方苹果文档(描述它是如何完成的)。

然而,通过 Apple Dev Guides 挖掘,我可以找到“ ibDidAddToDesignableDocument :”。
使用以下代码,我设法从库中创建了我的辅助项目:

- (void)ibDidAddToDesignableDocument:(IBDocument *)document {
    [super ibDidAddToDesignableDocument:document];

    NSView *prototypeView = [[[NSView alloc] initWithFrame:NSMakeRect(0.0, 0.0, 300, 65.0)] autorelease];
    DLListViewItem *prototypeViewItem = [[[DLListViewItem alloc] initWithNibName:nil bundle:nil] autorelease];

    [document addObject:prototypeViewItem toParent:nil];
    [document addObject:prototypeView toParent:nil];

    [document connectOutlet:@"view" ofSourceObject:prototypeViewItem toDestinationObject:prototypeView];
    [document connectOutlet:@"listView" ofSourceObject:prototypeViewItem toDestinationObject:self];
    [document connectOutlet:@"prototypeItem" ofSourceObject:self toDestinationObject:prototypeViewItem];
}

不过……</p>

…<strong>IB仅在从库中实际初始拖动时为 NSCollectionView 添加这些辅助项目,而不是在任何其他“ibDidAddToDesignableDocument:”调用中,例如在嵌入、复制或复制项目时。(虽然我的方法会,而且总而言之)

这让我想知道 Apple 是否真的为此使用了“ibDidAddToDesignableDocument:”,以及我是否完全在正确的轨道上。

如何正确地模仿这一点?我很难区分“ibDidAddToDesignableDocument:”的不同上下文。有人成功做到这一点吗?
不幸的是,谷歌、谷歌代码、GitHub 或文档都没有透露任何有用的信息,所以我在这里迫切需要帮助。:(

提前致谢!

编辑:哦,太好了,这个问题刚刚给我带来了风滚草徽章,耶!不是。
实际上我更喜欢有用的答案,但无论如何谢谢;)

4

1 回答 1

0

我在不久前自己做的一个插件上遇到了这个问题。在我的情况下,我能够检查对象的属性以查看它是否已经初始化,并在这种情况下跳过添加辅助对象。我相信 BWToolkit 使用了一些类似的内部检查。您不能检查对象的“prototypeItem”属性以查看是否需要跳过创建辅助对象吗?

于 2010-10-04T15:03:50.800 回答