代码之家  ›  专栏  ›  技术社区  ›  Renaud Pradenc

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

  •  14
  • Renaud Pradenc  · 技术社区  · 15 年前

    我创建了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
    }
    

    不幸的是 形象 绑定不会显示在界面生成器中。

    我真的需要创建一个IBPlugin来公开Interface Builder中的绑定吗? 对于我不打算重用的自定义视图来说,这似乎太过分了。

    4 回复  |  直到 15 年前
        1
  •  14
  •   Peter Hosey    15 年前


    对问题正文中问题的回答:是的,您确实需要一个IB插件来公开IB中的绑定。

    exposeBinding: 消息是您的代码。因此,您需要将其放入Interface Builder中。这意味着要编写一个IB插件。

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

        2
  •  12
  •   RISCfuture RISCfuture    15 年前

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

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

        3
  •  2
  •   Alex    15 年前

    不,你可以用这个方法

    bind:toObject:withKeyPath:options:

    以编程方式建立绑定。我相信您确实需要创建一个IB调色板,以使绑定显示在Interface Builder中,但是对于一个一次性类,我不打算重用,我从来没有费心过。

        4
  •  2
  •   Evan    15 年前

    如果您能够设法手动进行绑定,您将节省大量时间。与几行手动绑定代码相比,创建自定义IB选项板需要大量的工作。但是,如果您需要一个定制的IB调色板,那么我将从检查NSView子类需要什么开始,从编码角度考虑。Crawford的绑定网站是一个很好的起点:

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

    另外需要注意的是,自定义视图还必须在Interface Builder环境中工作。在自定义NSView对象的绑定代码中,有一些小的修复需要落实到位,以便它在Interface Builder中正常工作和绑定。克劳福德的网站上也记录了这些细节:

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

    推荐文章