Frage

Ich versuche, eine NSFontPanel zu verwenden, damit der Benutzer eine Anwendung weite Schrifteinstellung ändern. Es soll so etwas wie dies funktioniert:. Der Benutzer auf eine Schaltfläche klickt, eine Schrifttafel erscheint, sie eine Schriftart und Größe auswählen und ihre Auswahl beibehalten wird

Der folgende Code zeigt das Panel:

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

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

Die Dokumentation scheint darauf hinzudeuten, dass die changeFont: (id) sender Methode soll, wenn die Schrift Änderungen genannt werden; dies ist in meinem Fall nicht passiert.

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

Alle Ideen, was ich falsch machen könnte?

War es hilfreich?

Lösung

Das Objekt, das Sie -changeFont: auf muss der Ersthelfer oder darüber in der Responder-Kette definiert haben. Sie haben nicht angegeben, wo Sie die Methode definiert haben, aber ich nehme an, es auf einem Controller-Objekt ist, das nicht in der Responder-Kette ist.

Andere Tipps

umfassen diese:

[fontManager setTarget:self];

NSFontManager Delegierter besteht in erster Linie die Schriftarten zu filtern, um es in die Schrifttafel über -fontManager:willIncludeFont: liefert.

Wie kperryua erwähnt, -changeFont: wird die Responder-Kette geschickt. Die Schaltfläche, das Schriftart-Menü oder seine umschließenden Ansicht startet vielleicht ein guter Ort sein, ein Responder für -changeFont: zu setzen.

Sie können die Font Handhabung Führung geringfügig nützlicher als die Font-Panel Führer.

Das Kernproblem ist diese Zeile:

[fontPanel makeKeyAndOrderFront:sender];

der Schrifttafel der Schlüssel Fenster Indem, wird es keine Ahnung, wo Aktion Nachrichten wie -changeFont senden. Zu

Hier ist meine Arbeits Umsetzung. Kernpunkt ist, dass Sie Ihre Aufgabe als Ersthelfer machen sollten, wo Sie - (void)changeFont:(id)sender umgesetzt haben

NSFontManager *fontManager = [NSFontManager sharedFontManager];

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

[panel orderFront:self];

Einfache changeFont: Implementierung Referenz - Fontbehandlung

-(void) changeFont:(id)sender
{
    //Here sender would be NSFontManager
    NSFont *oldFont = [self font];
    NSFont *newFont = [sender convertFont:oldFont];
    [self setFont:newFont];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top