validModesforfontPanel mai chiamato
-
28-10-2019 - |
Domanda
Ho un'applicazione in cui uso il NSFontPanel
. Apro il pannello dei caratteri in questo modo:
NSFontManager *fontManager = [NSFontManager sharedFontManager];
[fontManager orderFrontFontPanel:self];
[fontManager setDelegate:self];
[fontManager setTarget:self];
[fontManager setAction:@selector(changeFont:)];
Ho quindi un -(void)changeFont:(id)sender
Metodo che reagisce alle modifiche del carattere nel pannello. Tutto funziona bene.
Ora, voglio disabilitare alcune delle opzioni di carattere, quindi impledo il validModesForFontPanel
metodo del NSFontPanelValidation
protocollo:
- (NSUInteger)validModesForFontPanel:(NSFontPanel *)fontPanel {
NSLog(@"validModesForFontPanel");
return NSFontPanelFaceModeMask | NSFontPanelCollectionModeMask | NSFontPanelSizeModeMask;
}
Tuttavia, il metodo non viene mai chiamato. Nella documentazione dice: "Questo messaggio viene inviato la catena del risponditore al primo soccorritore che implementa il metodo. Idealmente quell'oggetto dovrebbe essere il primo risponditore trovato che implementa anche ChangeFont:."
Implezzo changeFont
In questo risponditore, quindi a meno che non ci sia qualche altro soccorritore di cui non sono a conoscenza, non so cosa succeda a questo messaggio.
Qualcuno ha qualche suggerimento?
Soluzione
Non indichi qualsiasi risponditore per il pannello, solo per il manager.
Questo dovrebbe farlo:
NSFontPanel* fontPanel = [fontManager fontPanel:YES];
[fontPanel setDelegate:self];
[fontPanel makeKeyAndOrderFront:sender];