2012-02-20 4 views
2

J'ai une application où j'utilise le NSFontPanel. Je ouvrir le panneau de police comme ceci:validModesForFontPanel jamais appelé

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

J'ai alors une méthode -(void)changeFont:(id)sender qui réagit à la police des changements dans le panneau. Tout cela fonctionne bien.

Maintenant, je veux désactiver certaines des options de police, donc je mets en œuvre la méthode validModesForFontPanel du protocole NSFontPanelValidation:

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

Cependant, la méthode est jamais appelé. Dans la documentation, il est dit: « Ce message est envoyé à la chaîne de répondeur au premier intervenant implémentant la méthode Idéalement cet objet doit être le premier intervenant a révélé que met également en œuvre changeFont :.. »

Je installe changeFont dans ce répondeur, donc à moins qu'il y ait un autre répondeur dont je ne suis pas au courant, je ne sais pas ce qu'il advient de ce message.

Quelqu'un a-t-il des suggestions?

Répondre

2

Vous n'indiquez aucun répondeur pour le panneau, juste pour le gestionnaire.
cela devrait le faire:

NSFontPanel* fontPanel = [fontManager fontPanel:YES]; 
[fontPanel setDelegate:self];  
[fontPanel makeKeyAndOrderFront:sender];  
+0

Salut JPED, je vous remercie pour votre réponse. J'ai cru comprendre que tout était passé par NSFontManager, mais je suppose que j'avais tort. Quoi qu'il en soit, le code ci-dessus ne fonctionne pas car le délégué de 'NSFontPanel' doit être une instance de' NSWindowDelegate', et 'self' est une sous-classe de' NSViewController'. Il me donne cet avertissement: 'warning: envoyer 'TextViewController * const __strong' au paramètre de type incompatible 'id '' – pajevic

+0

Salut à nouveau. J'étais un peu trop rapide quand j'ai dit que ça ne marchait pas. En fait, malgré le fait que je reçois l'avertissement. Est-ce quelque chose que vous avez rencontré? – pajevic

+0

J'ai finalement compris. L'avertissement est venu parce que ma classe n'appliquait pas le protocole 'NSWindowDelegate'. Je souhaite juste que tout cela soit un peu mieux documenté. Quoi qu'il en soit, merci pour votre réponse, elle a fait l'affaire: D – pajevic