Pregunta

He creado una subclase de NSView para dibujar una imagen como un patrón:

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

@end

Implementé lo siguiente para exponer los enlaces:

+ (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
}

Lamentablemente, el enlace imagen no se muestra en Interface Builder.

¿Realmente tengo que crear un IBPlugin para exponer los enlaces en Interface Builder? Eso parece demasiado para una vista personalizada que no pienso reutilizar.

¿Fue útil?

Solución

Respuesta al título: No, puede vincular una vista personalizada sin un complemento IB (haciéndolo en código).
Respuesta a la pregunta en el cuerpo de la pregunta: Sí, necesita un complemento IB para exponer el enlace en IB.

Su código no se ejecuta dentro de Interface Builder a menos que lo coloque en Interface Builder, y ese mensaje exposeBinding: es su código. Por lo tanto, necesitas ponerlo en Interface Builder. Eso significa escribir un complemento IB.

Además, los complementos de IB no son lo mismo que las paletas de IB anteriores. Los complementos requieren IB 3 y son mucho más fáciles de crear. Las paletas requieren IB 2 y fueron difíciles de crear.

Otros consejos

Simplemente vinculé mi objeto controlador a mi objeto de vista usando un enlace estándar diferente (por ejemplo, información sobre herramientas), luego edité el archivo XIB usando un editor de texto y modifiqué el XML manualmente.

A partir de entonces, el enlace funciona correctamente e incluso se muestra correctamente en el Interface Builder para iniciar.

No, puedes usar el método

bind:toObject:withKeyPath:options:

para establecer su enlace programáticamente. Creo que tiene que crear una paleta de IB para que los enlaces aparezcan en el Interface Builder, pero para una clase única que no pretendo reutilizar, nunca me molesté.

Si puede administrar los enlaces manualmente, se ahorrará mucho tiempo. Crear paletas IB personalizadas es mucho trabajo en comparación con unas pocas líneas de código de enlace manual. Pero, si sus necesidades requieren una paleta de IB personalizada, comenzaré revisando lo que requerirá la subclase NSView, en lo que respecta a la codificación. Un gran lugar para comenzar a buscar es el sitio web de Crawford en enlaces:

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

Lo he usado mucho en los últimos dos años, me ha ayudado mucho con mis objetos de paleta IB personalizados y con los problemas de enlace en general. Hay un ejemplo en su sitio que detalla específicamente los NSView personalizados con enlaces personalizados.

Otra cosa a tener en cuenta, es que su vista personalizada también tendrá que funcionar en el entorno de Interface Builder. Hay algunas correcciones pequeñas que deben colocarse en su código de enlaces en su objeto NSView personalizado para que funcione y se vincule correctamente en Interface Builder. Estos detalles también se mencionan en el sitio de Crawford:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top