IBPlugin:在IB库中拖动时添加其他对象

时间:2010-09-25 13:50:44

标签: cocoa interface-builder ibplugin

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

通过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];
}

...然而

... IB为NSCollectionView 添加了来自库的实际初始拖动的辅助项,而不是“ibDidAddToDesignableDocument”的任何其他调用:“,例如嵌入,复制或复制项目时。 (虽然我的方法会,但总的来说)

这让我想知道Apple是否真的使用了“ibDidAddToDesignableDocument:”,如果我完全正确地使用它。

如何正确模仿?我很难尝试区分“ibDidAddToDesignableDocument:”的不同上下文。有人成功完成了吗?
不幸的是,谷歌,谷歌代码,GitHub或文档都没有发现任何有用的东西,所以我迫切需要帮助。 :(

提前致谢!

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

1 个答案:

答案 0 :(得分:0)

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