Pregunta

En IB es fácil vincular una etiqueta o un campo de texto al keyPath de algún controlador.

El NSDockTile (disponible a través de [[NSApp dockTile] setBadgeLabel: @ " 123 "]) no aparece en IB, y no puedo descubrir cómo enlazar programáticamente su " badgeLabel " propiedad como si pudiera unir una columna de etiqueta / campo de texto / tabla.

¿Alguna idea?

¿Fue útil?

Solución

NSDockTile no tiene ningún enlace, por lo que su controlador tendrá que actualizar el mosaico de la base manualmente. Puede hacer esto usando KVO que tendría el mismo efecto que vincularlo.

Cree un contexto como global:


static void* MyContext=(void*)@"MyContext";

Luego, en su método init:


[objectYouWantToWatch addObserver:self forKeyPath:@"dockTileNumber" options:0 context:MyContext];

Luego debe implementar este método para recibir notificaciones de los cambios en la ruta clave:

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (context == MyContext) {
        [[NSApp dockTile] setBadgeLabel:[object valueForKeyPath:keyPath]];
    }
    else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

Asegúrese de quitar el observador cuando el objeto controlador desaparezca.

Otros consejos

Si NSDockTile admite enlaces, puede usar el método bind: toObject: withKeyPath: options: para configurar enlaces en la propiedad badgeLabel. Consulte la documentación para obtener detalles sobre qué argumentos utilizar. Si no funciona, puede implementar la observación de valores clave en su clase de controlador y actualizar la etiqueta cada vez que cambie el valor, o incluso anular NSDockTile para crear una subclase compatible de enlaces.

He probado muchas variaciones de bind: toObject: withKeyPath: options: en NSDockTile, en un controlador, en la fuente de datos. No puedo imaginar una combinación que funcione. Alternativamente, ¿hay alguna forma de tener un objeto BatchController que pueda vincularse a la fuente de datos y luego actualice la insignia? ¿Cómo tomo un objeto NSO y lo hago enlazable?

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