加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – Mac OS X NSUserNotificationCenter通知取消关闭

发布时间:2020-12-16 05:26:45 所属栏目:百科 来源:网络整理
导读:在我们的应用程序中,我们正在以警示风格显示通知中心通知. 显示通知工作正常,以及当用户通过点击通知或通过单击操作按钮与通知进行交互时,我们收到回调. 但是,当用户点击通知中的其他按钮时,我们有兴趣获取回调或事件.我看到MAC OS在显示其更新可用对话框时
在我们的应用程序中,我们正在以警示风格显示通知中心通知.

显示通知工作正常,以及当用户通过点击通知或通过单击操作按钮与通知进行交互时,我们收到回调.

但是,当用户点击通知中的其他按钮时,我们有兴趣获取回调或事件.我看到MAC OS在显示其更新可用对话框时执行此操作.

有关OS X更新可用警报的说明,请参阅此图片:

我已经通过互联网进行了搜索,并且也通过了通知中心的文档this和this.

有没有未记录的API?或一些定制机制检测点击其他(关闭)按钮?

解决方法

而另一个(关闭)按钮显然是为了解除通知,无论其自定义标题可能表示什么,当用户通过点击关闭按钮关闭通知时,没有任何优雅的方式通知.

然而,您可以做的是监控默认用户通知中心的deliverNotifications属性:只要通知尚未被忽略,该数组将包含该通知.一旦通知被关闭,该阵列将不再包含它.

这可以在NSUserNotificationCenter委托方法中实现,如下所示:

- (void)userNotificationCenter:(NSUserNotificationCenter *)center didDeliverNotification:(NSUserNotification *)notification
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{
                       BOOL notificationStillPresent;
                       do {
                           notificationStillPresent = NO;
                           for (NSUserNotification *nox in [[NSUserNotificationCenter defaultUserNotificationCenter] deliveredNotifications]) {
                               if ([nox.identifier isEqualToString:notification.identifier]) notificationStillPresent = YES;
                           }
                           if (notificationStillPresent) [NSThread sleepForTimeInterval:0.20f];
                       } while (notificationStillPresent);
                       dispatch_async(dispatch_get_main_queue(),^{
                           [self notificationHandlerForNotification:notification];
                       });
                   });
}

该代码将检查每200毫秒通知是否仍然存在.一旦消失,-notificationHandler:方法将在主线程上调用,这只是一个任意的回调方法.

在这个custom -notificationHandler:方法中,您可以检查NSUserNotificationCenter是否已经为通知调用了didActivateNotification:delegate方法.如果没有,用户最有可能点击通知的关闭按钮.

然而,这并不是故障安全的,因为用户也可以另外关闭通知,即不点击关闭按钮.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读