7
votes

Utilisation de NsfontPanel dans le cacao

J'essaie d'utiliser un NSFontPanel pour permettre à l'utilisateur de modifier un paramètre de police à l'échelle de l'application. Il est censé travailler quelque chose comme ceci: l'utilisateur clique sur un bouton, un panneau de police apparaît, ils choisissent une police et une taille, et leur sélection est persistée.

Le code suivant indique le panneau: P>

- (void)changeFont:(id)sender {
    // blah
}


1 commentaires

5 Réponses :


2
votes

L'objet que vous avez défini -changefont: doit être le premier répondeur ou au-dessus de la chaîne du répondeur. Vous n'avez pas précisé où vous avez défini la méthode, mais je suppose que c'est sur un objet contrôleur qui n'est pas dans la chaîne du répondeur.


1 commentaires

La vue du contrôleur d'affichage est en train d'être chargée dans une autre fenêtre; Ajout de Changefont: To The Parent ViewController a travaillé. Merci de votre aide.



1
votes

NSFontManager Le délégué de Nsfontmanager existe principalement pour filtrer les polices qu'il fournit au panneau de polices via -FontManager: WillinCLUDefont: . .

Comme Kperryua mentionne, -changefont: est envoyé la chaîne du répondeur. Le bouton qui lance le menu Police ou sa vue ci-joint pourrait être un bon endroit pour mettre un répondeur pour -changefont: .

Vous trouverez peut-être le Manipulation de la police Guide marginalement plus utile que le Panneau de police Guide.



1
votes

Le problème de base est la suivante:

[fontPanel makeKeyAndOrderFront:sender];


1 commentaires

Je l'ai changé pour commanderfrontfontpanel:; Mais le problème était en fait avec la chaîne de répondeur. Merci.



9
votes

Inclure ceci:

[fontManager setTarget:self];


0 commentaires

0
votes

Voici ma mise en œuvre de travail. Point clé est que vous devriez rendre votre objet comme premier répondant où vous avez implémenté - (VOID) Changefont: (id) Sender CODE>

-(void) changeFont:(id)sender
{
    //Here sender would be NSFontManager
    NSFont *oldFont = [self font];
    NSFont *newFont = [sender convertFont:oldFont];
    [self setFont:newFont];
}


0 commentaires