In Mac OS X 10.8 (Mountain Lion) Apple introduced User Notifications. They are displayed in the notification center. They can also be displayed as small popup message.
NSUserNotification *notification = [[NSUserNotification alloc] init];
notification.title = @"Hello, World!";
notification.informativeText = [NSString stringWithFormat:@"details details details"];
notification.soundName = NSUserNotificationDefaultSoundName;
[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification];
That should display a notification in the Notification Center. What about the popup message? It's not displayed by default. To display it, there must
be implemented NSUserNotificationCenterDelegate protocol. In the example I've created, I implemented it in my AppDelegate class. The method we need is called userNotificationCenter:shouldPresentNotification:. Here is an example of its implementation:
- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center
shouldPresentNotification:(NSUserNotification *)notification
{
return YES;
}
Of course, we need to set a class as a delegate of the NSUserNotificationCenter. A good method for that is applicationDidFinishLaunching: in AppDelegate class:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self];
}
And that's it! The message popup will be displayed together with the notification. I really recommend to check the documentation of classes that appered in this article. There are many other features like setting additional buttons or methods that are called when the notification is displayed or deliverd.
Can only use the apps notifications are signed?
ReplyDeleteVery useful! Many thanks dude!
ReplyDeleteReally useful!! Very clearly explained. Thanks.
ReplyDeleteWorks great, thanks!
ReplyDeleteJust don't forget to add the protocol in your AppDelegate.h file. For instance:
@interface AppDelegate : NSObject <NSApplicationDelegate, NSUserNotificationCenterDelegate>