绑定自定义NSView:它是否需要创建IBPlugin?

Ren*_*enc 14 cocoa interface-builder nsview ibplugin cocoa-bindings

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

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

@end
Run Code Online (Sandbox Code Playgroud)

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

+ (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
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,图像绑定不会出现在Interface Builder中.

我是否真的必须创建一个IBPlugin来在Interface Builder中公开绑定?对于我不打算重用的自定义视图来说,这似乎有些过分.

Pet*_*sey 14

标题回答:不,你可以在没有IB插件的情况下绑定自定义视图(在代码中执行).
回答问题正文中的问题:是的,您确实需要一个IB插件来暴露IB中的绑定.

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

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


小智 12

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

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