Question

J'essaie d'utiliser NSFontPanel pour permettre à l'utilisateur de modifier un paramètre de police d'application. Cela doit fonctionner comme ceci: l'utilisateur clique sur un bouton, un panneau de polices apparaît, il choisit une police et une taille, et sa sélection est conservée.

Le code suivant montre le panneau:

- (IBAction)showFontMenu:(id)sender {
    NSFontManager *fontManager = [NSFontManager sharedFontManager];
    [fontManager setDelegate:self];

    NSFontPanel *fontPanel = [fontManager fontPanel:YES];
    [fontPanel makeKeyAndOrderFront:sender];
}

La documentation semble suggérer que la méthode d'envoi changeFont: (id) devrait être appelée lorsque la police est modifiée; cela ne se produit pas dans mon cas.

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

Avez-vous des idées sur ce que je peux mal faire?

Était-ce utile?

La solution

L'objet pour lequel vous avez défini -changeFont: doit être le premier répondant ou au-dessus de celui-ci dans la chaîne de répondeurs. 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 ne fait pas partie de la chaîne de répondeurs.

Autres conseils

inclure ceci:

[fontManager setTarget:self];
Le délégué de

NSFontManager existe principalement pour filtrer les polices qu'il fournit au panneau de polices via -fontManager: willIncludeFont: .

Comme le mentionne kperryua, -changeFont: est envoyé dans la chaîne de répondeurs. Le bouton qui lance le menu de polices ou sa vue englobante peut être un bon endroit pour placer un répondeur pour -changeFont: .

Vous pouvez trouver le Gestion des polices guide légèrement plus utile que le Panneau de polices guide.

Le problème principal est cette ligne:

[fontPanel makeKeyAndOrderFront:sender];

En faisant du panneau de polices la fenêtre de clé, il n'a aucune idée de l'endroit où envoyer des messages d'action tels que -changeFont: to.

Voici mon implémentation de travail. Le point clé est que vous devriez faire de votre objet le premier intervenant dans lequel vous avez implémenté - (void) changeFont: (id) expéditeur

NSFontManager *fontManager = [NSFontManager sharedFontManager];

NSFontPanel *panel = [fontManager fontPanel:YES];
[[self window] makeFirstResponder:self];

[panel orderFront:self];

Simple changeFont: Référence sur la mise en oeuvre - Gestion des polices

-(void) changeFont:(id)sender
{
    //Here sender would be NSFontManager
    NSFont *oldFont = [self font];
    NSFont *newFont = [sender convertFont:oldFont];
    [self setFont:newFont];
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top