14

我创建了一个 NSView 的子类来将图像绘制为模式:

@interface CePatternView : NSView
{
    NSImage*    image;
    id      observableObjectForImage;
    NSString*   keyPathForImage;
}

@end

我实现了以下内容来公开绑定:

+ (void)initialize
{
    // Expose the "image" binding to IB.
    [self exposeBinding:@"image"];  
}

- (Class)valueClassForBinding:(NSString *)binding
{
    if([binding isEqualToString:@"image"])
        return [NSImage class];
    return nil; // Unknown binding
}

不幸的是,图像绑定没有显示在 Interface Builder 中。

我真的必须创建一个 IBPlugin 才能在 Interface Builder 中公开绑定吗?对于我不打算重用的自定义视图来说,这似乎有点过头了。

4

4 回答 4

14

对标题的回答:不,您可以在没有 IB 插件的情况下绑定自定义视图(通过在代码中进行)。
对问题正文的回答:是的,您确实需要一个 IB 插件来公开 IB 中的绑定。

除非您将代码放入 Interface Builder 中,否则您的代码不会在 Interface Builder 中运行,并且该exposeBinding:消息就是您的代码。因此,您需要将其放入 Interface Builder 中。这意味着编写一个 IB 插件。

此外,IB 插件与旧的 IB 调色板不同。插件需要 IB 3 并且更容易创建。调色板需要 IB 2 并且创建起来很痛苦。

于 2009-03-03T19:59:23.623 回答
12

我只是使用不同的标准绑定(例如 toolTip)将我的控制器对象绑定到我的视图对象,然后使用文本编辑器编辑 XIB 文件并手动更改 XML。

此后,绑定可以正常工作,甚至可以正确显示在 Interface Builder 中以启动!

于 2009-03-25T03:27:42.277 回答
2

不,您可以使用该方法

bind:toObject:withKeyPath:options:

以编程方式建立绑定。我相信您确实必须创建一个 IB 调色板才能让绑定出现在 Interface Builder 中,但是对于我不打算重用的一次性类,我从来没有打扰过。

于 2009-03-03T14:33:07.417 回答
2

如果您可以设法手动进行绑定,您将节省大量时间。与几行手动绑定代码相比,创建自定义 IB 调色板需要大量工作。但是,如果您的需求需要自定义 IB 调色板,那么我将首先查看 NSView 子类将需要什么,以编码方式进行。一个很好的起点是 Crawford 的绑定网站:

http://homepage.mac.com/mmalc/CocoaExamples/controllers.html

在过去的几年里,我经常使用它,它对我的​​自定义 IB 调色板对象和一般的绑定问题有很大帮助。在他的网站上有一个示例,专门详细说明了带有自定义绑定的自定义 NSView。

还有一点需要注意的是,您的自定义视图也必须在 Interface Builder 环境中工作。需要在自定义 NSView 对象的绑定代码中进行一些小修复,以便它在 Interface Builder 中正常运行和绑定。这些细节也在 Crawford 的网站上注明:

http://homepage.mac.com/mmalc/CocoaExamples/controllers.html#ibBindings

于 2009-03-03T16:46:58.360 回答