有人可以举例说明从Cocoa应用程序向通知中心发送测试通知吗?例如。当我点击NSButton
答案 0 :(得分:152)
Mountain Lion中的通知由两个类处理。 NSUserNotification
和NSUserNotificationCenter
。 NSUserNotification
是您的实际通知,它有标题,消息等,可以通过属性设置。要发送您已创建的通知,您可以使用NSUserNotificationCenter中提供的deliverNotification:
方法。 Apple文档提供了有关NSUserNotification&的详细信息。 NSUserNotificationCenter但发布通知的基本代码如下所示:
- (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];
}
这将生成带有标题,消息的通知,并在显示时播放默认声音。您可以使用通知进行更多操作(例如调度通知),这些都在我链接到的文档中详细说明。
一个小问题,只有在您的应用程序是关键应用程序时才会显示通知。如果您希望显示通知,无论您的应用程序是否为密钥,您都需要指定NSUserNotificationCenter
的委托并覆盖委托方法userNotificationCenter:shouldPresentNotification:
,以便它返回YES。可以找到NSUserNotificationCenterDelegate
的文档here
以下是向NSUserNotificationCenter提供委托,然后强制显示通知的示例,无论您的应用程序是否为密钥。在应用程序的AppDelegate.m文件中,编辑它:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self];
}
- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification{
return YES;
}
在AppDelegate.h中,声明该类符合NSUserNotificationCenterDelegate协议:
@interface AppDelegate : NSObject <NSApplicationDelegate, NSUserNotificationCenterDelegate>
答案 1 :(得分:0)
@alexjohnj的答案已针对Swift 5.2更新
在AppDelegate中
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Set delegate
NSUserNotificationCenter.default.delegate = self
}
然后确认为NSUserNotificationCenterDelegate为
extension AppDelegate: NSUserNotificationCenterDelegate {
func userNotificationCenter(_ center: NSUserNotificationCenter, shouldPresent notification: NSUserNotification) -> Bool {
true
}}