NSUserNotification - 单击时如何打开应用程序

时间:2012-11-01 22:12:23

标签: objective-c macos cocoa nsusernotification

我正在使用NSUserNotification来显示通知。这工作正常。问题是当您点击通知时:

  1. 不会从通知中心删除应用通知。
  2. 应用程序(最小化时)无法打开。
  3. 任何熟悉NSUserNotification的人都可以提供一些指示吗?

    notice.m

    #import "Notice.h"
    
    @implementation Notice
    
    - (void) notify:(NSDictionary *)message {
    
        NSLog(@"Notification - Show it");
    
        NSUserNotification *notification = [[NSUserNotification alloc] init];
        [notification setTitle:[message valueForKey:@"title"]];
        [notification setInformativeText:[message valueForKey:@"content"]];
        [notification setDeliveryDate:[NSDate dateWithTimeInterval:0 sinceDate:[NSDate date]]];
        [notification setSoundName:NSUserNotificationDefaultSoundName];
        NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter];
        [center scheduleNotification:notification];
    }
    
    - (void) userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification
    {
    
        NSLog(@"Notification - Clicked");
    
        notification=nil;
        [center removeDeliveredNotification: notification];
    }
    
    
    
    
    
    
    
    #pragma mark WebScripting Protocol
    
    + (BOOL) isSelectorExcludedFromWebScript:(SEL)selector
    {
        if (selector == @selector(notify:))
            return NO;
    
        return YES;
    }
    
    + (NSString*) webScriptNameForSelector:(SEL)selector
    {
        id  result = nil;
    
        if (selector == @selector(notify:)) {
            result = @"notify";
        }
    
        return result;
    }
    
    // right now exclude all properties (eg keys)
    + (BOOL) isKeyExcludedFromWebScript:(const char*)name
    {
        return YES;
    }
    
    @end
    

    谢谢

1 个答案:

答案 0 :(得分:11)

只需实现NSUserNotificationCenterDelegate并定义此方法:

- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification

示例:

这是我在“通知程序”应用程序中所做的。

- (void) userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification
{
    NSRunAlertPanel([notification title], [notification informativeText], @"Ok", nil, nil);
}

- (void) userNotificationCenter:(NSUserNotificationCenter *)center didDeliverNotification:(NSUserNotification *)notification
{
    notifications=nil;
    [tableView reloadData];
    [center removeDeliveredNotification: notification];
}

当通知被激活时(由用户点击)我只是通过面板通知用户(我可以使用hud窗口)。在这种情况下,我立即删除已发送的通知,但这不是通常发生的情况。通知可以在那里停留一段时间并在半小时后删除(这取决于您正在开发的应用程序)。