Pregunta

Tengo una aplicación donde uso el NSFontPanel. Abro el panel de fuentes así:

NSFontManager *fontManager = [NSFontManager sharedFontManager];
[fontManager orderFrontFontPanel:self];
[fontManager setDelegate:self];
[fontManager setTarget:self];
[fontManager setAction:@selector(changeFont:)];

Entonces tengo un -(void)changeFont:(id)sender Método que reacciona a los cambios de fuente en el panel. Todo esto funciona bien.

Ahora, quiero deshabilitar algunas de las opciones de fuentes, por lo que implemento el validModesForFontPanel método del NSFontPanelValidation protocolo:

- (NSUInteger)validModesForFontPanel:(NSFontPanel *)fontPanel {
    NSLog(@"validModesForFontPanel");
    return NSFontPanelFaceModeMask | NSFontPanelCollectionModeMask | NSFontPanelSizeModeMask;
}

Sin embargo, el método nunca se llama. En la documentación dice: "Este mensaje se envía a la cadena de respondedores al primer respondedor que implementa el método. Idealmente, ese objeto debe ser el primer respondedor que también implementa ChangeFont:."

Yo implemento changeFont En este respondedor, por lo tanto, a menos que haya algún otro respondedor que no conozca, no sé qué sucede con este mensaje.

¿Alguien tiene alguna sugerencia?

¿Fue útil?

Solución

No indica ningún respondedor para el panel, solo para el gerente.
Esto debería hacerlo:

NSFontPanel* fontPanel = [fontManager fontPanel:YES];
[fontPanel setDelegate:self];    
[fontPanel makeKeyAndOrderFront:sender];    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top