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?

È stato utile?

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];    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top