Send notification to Mountain lion notification center

大兔子大兔子 提交于 2019-11-26 17:34:46

问题


Can someone give an example of sending a test notification from a Cocoa app to Notifications Center? eg. when I click on an NSButton


回答1:


Notifications in Mountain Lion are handled by two classes. NSUserNotification and NSUserNotificationCenter. NSUserNotification is your actual notification, it has a title, a message etc. that can be set via properties. To deliver a notification that you've created, you can use the deliverNotification: method available in NSUserNotificationCenter. The Apple docs have detailed information on NSUserNotification & NSUserNotificationCenter but the basic code to post a notification looks like this:

- (IBAction)showNotification:(id)sender{
    NSUserNotification *notification = [[NSUserNotification alloc] init];
    notification.title = @"Hello, World!";
    notification.informativeText = @"A notification";
    notification.soundName = NSUserNotificationDefaultSoundName;

    [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification];
    [notification release];
}

That'll produce a notification with a title, a message and that'll play the default sound when it's displayed. There's a lot more that you can do with notifications than just this (such as scheduling notifications) and that's all detailed in the documentation I linked to.

One small point, notifications will only be displayed when your application is the key application. If you want your notifications to display regardless of if your application is key or not, you'll need to specify a delegate for NSUserNotificationCenter and override the delegate method userNotificationCenter:shouldPresentNotification: so that it returns YES. The documentation for NSUserNotificationCenterDelegate can be found here

Here's an example of providing a delegate to NSUserNotificationCenter and then forcing notifications to be displayed regardless of if your application is key. In your application's AppDelegate.m file, edit it like this:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self];
}

- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification{
    return YES;
}

And in AppDelegate.h, declare that the class conforms to the NSUserNotificationCenterDelegate protocol:

@interface AppDelegate : NSObject <NSApplicationDelegate, NSUserNotificationCenterDelegate>


来源:https://stackoverflow.com/questions/11814903/send-notification-to-mountain-lion-notification-center

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!