Programmieren mit Swift - Für macOS und iOS
Programmieren mit Swift - Für macOS und iOS
Growl einbinden, Teil 2

Durch eine zusätzliche Methode im delegate, nämlich growlNotificationWasClicked, ist es möglich, auf das Anklicken des Growl Fensters zu reagieren. Dafür ist es zwingend nötig einen clickContext zu übermitteln. Ist dieser Parameter nil, wird die Methode nicht aufgerufen. Der clickContext ist es auch, den man vom Growl zurück gesendet bekommt. So ist es möglich, verschiedene Meldungen, die vielleicht gleichzeitig auf dem Bildschirm sind, zu unterscheiden.
- (IBAction)clickSendGrowlMessage:(id)sender
{
    [GrowlApplicationBridge notifyWithTitle:
@"Eine Nachricht"
                                       description:[inputTextField stringValue]
                                       notificationName:@"Hallo"
                                       iconData:nil
                                       priority:1
                                       isSticky:NO
                                       clickContext:@"Growl Nachricht"];
}

- (
void) growlNotificationWasClicked:(id)clickContext
{
    NSLog(clickContext);
}
Im Consolenfenster kann man sehr gut erkennen was passiert, wenn auf eine Growl Benachrichtigung geklickt wird.
stacks_image_1C8030BE-AB27-4815-BDF6-C9B3EBC66E1C
Das Gegenstück dieser Methode ist growlNotificationTimedOut. Diese Methode wird aufgerufen, wenn die Growl Mitteilung ausblendet, ohne dass sie angeklickt wurde. Auch hier wird wieder der clickContext übertragen, obwohl nicht durch den Benutzer geklickt wurde.
stacks_image_46D3870B-DAFB-436F-9626-CA0959748B7F
Die Methoden growlNotificationWasClicked und growlNotificationTimedOut benötigen übrigens keine Deklaration in der MyController.h Datei. Sind Sie im delegate implementiert, reicht es vollkommen, um sie aufzurufen.

Des weiteren ist es möglich, die Growl Meldungen mit einem eigenen Icon auszustatten. Um dies zu erreichen muss im delegate die Methode applicationIconForGrowl implementiert sein. Ist dies nicht der Fall, verwendet Growl das Icon der aufrufenden Anwendung.

Wie Sie ein Icon in Ihr Projekt bekommen, haben Sie bereits beim Erstellen des Geo Converters gelernt, ziehen Sie es einfach aus dem Finder in den Resources-Ordner der Groups & Files.
stacks_image_DF262363-3164-4C2F-8C0D-FBFF2AD9B5F0
Ist dies geschehen, können Sie es mit wenig Aufwand zu einem Icon für Growl Meldungen machen. In diesem Codebeispiel hat das Symbol den Dateinamen g-logo und ist von Dateityp Icon (.icns)
- (NSImage*) applicationIconForGrowl
{
    NSString* imageName =
    [[NSBundle mainBundle]pathForResource:
@"g-logo" ofType:@"icns"];

    NSImage* tempImage =
    [[NSImage alloc] initWithContentsOfFile:imageName];
    return tempImage;
}
stacks_image_71864F5A-0988-48E1-AF0F-12E563EB57A1
Auch der Name, mit dem sich das Programm bei Growl registriert, kann vom Namen der Anwendung abweichen. Eine zusätzliche Methode macht dies möglich.
- (- (NSString*) applicationNameForGrowl
{
    return @"Growl Test von Cocoa-Coding";
}
stacks_image_2DF8B0FC-079B-4BF2-BB10-67EA55DB017F
Ein weiterer delegate Ausruf ist growlIsReady. Diese Methode wird automatisch ausgeführt, wenn Growl gestartet wird. Die Methode fragt nicht den aktuellen Status von Growl ab, sondern signalisiert nur, wenn Growl aktiviert wird. Um es zu testen, stoppen und starten Sie Grow in den Systemeinstellungen.
- (void) growlIsReady
{
    NSLog(@"growl is ready");
}