URB*_*URB 14 macos notifications objective-c nsusernotification nsusernotificationcenter
在我们的应用程序中,我们以警报样式显示通知中心通知.
显示通知工作正常,以及当用户通过单击通知或单击"操作"按钮与通知进行交互时,我们会收到回调.
但是,当用户点击通知中的"其他"按钮时,我们有兴趣获取回调或事件.我看到MAC OS在显示其可用更新对话框时执行此操作.
有关OS X更新可用警报的说明,请参阅此图像:
我已搜查这个在互联网上,以及通过通知中心的文档了这个和这个为好.
有没有未记录的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];
});
});
}
Run Code Online (Sandbox Code Playgroud)
此代码将检查通知是否仍然每200毫秒.一旦它消失,将在主线程上调用-notificationHandler:方法,这只是一个任意的回调方法.
在此自定义-notificationHandler:方法中,您可以检查是否已为通知调用NSUserNotificationCenter的didActivateNotification:委托方法.如果没有,用户很可能点击了通知的关闭按钮.
然而,这不是故障保护,因为用户也可能已经解除了通知,即没有点击关闭按钮.
归档时间: |
|
查看次数: |
4410 次 |
最近记录: |