gpt4 book ai didi

objective-c - Mac OS X NSUserNotificationCenter 通知获取取消事件/回调

转载 作者:太空狗 更新时间:2023-10-30 03:19:10 24 4
gpt4 key购买 nike

在我们的应用程序中,我们以警报样式显示通知中心通知。

显示通知工作正常,当用户通过单击通知或单击操作按钮与通知交互时我们会收到回调。

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

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

enter image description here

我已经在互联网上搜索了这个,并浏览了通知中心的文档 thisthis

是否有任何未记录的 API?还是一些检测点击其他(关闭)按钮的自定义机制?

最佳答案

虽然另一个(关闭)按钮显然是为了关闭通知,但不管它的自定义标题可能表示什么,当用户通过单击关闭按钮关闭通知时,没有优雅的方式来获得通知。

但是,您可以做的是监视默认用户通知中心的 deliveredNotifications 属性:只要通知尚未解除,该数组就会包含该通知。一旦通知被解除,数组将不再包含它。

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

- (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: 方法将在主线程上被调用,这只是一个任意的回调方法。

在这个自定义的 -notificationHandler: 方法中,您可以检查 NSUserNotificationCenter 的 didActivateNotification: delegate 方法是否已被调用用于通知。如果没有,用户很可能点击了通知的关闭按钮。

但这不是故障安全,因为用户也可能以其他方式关闭了通知,即没有点击关闭按钮。

关于objective-c - Mac OS X NSUserNotificationCenter 通知获取取消事件/回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21110714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com