一段时间后隐藏NSUserNotification

时间:2015-12-22 04:16:19

标签: cocoa notifications swift2

目前,当我使用警报样式创建NSUserNotification时,除非我手动关闭它,否则它不会隐藏。

enter image description here

有没有办法可以在2秒后自动关闭/隐藏它?

NSUserNotification代码仅供参考:

let notification:NSUserNotification = NSUserNotification()
notification.title = "Title"
notification.subtitle = "Subtitle"
notification.informativeText = "Informative text"

notification.soundName = NSUserNotificationDefaultSoundName

notification.deliveryDate = NSDate(timeIntervalSinceNow: 10)
notification.hasActionButton = false
let notificationcenter:NSUserNotificationCenter = NSUserNotificationCenter.defaultUserNotificationCenter()
notificationcenter.scheduleNotification(notification)

3 个答案:

答案 0 :(得分:5)

使用NSObject来实现这一点非常简单 performSelector:withObject:afterDelay:方法。

由于您在特定时间间隔后安排通知传送,因此您需要在解除之前将额外延迟添加到传送前的初始延迟。在这里,我已经将它们作为交付前10秒的常数写入,并在解雇前2秒写出:

let delayBeforeDelivering: NSTimeInterval = 10
let delayBeforeDismissing: NSTimeInterval = 2

let notification = NSUserNotification()
notification.title = "Title"
notification.deliveryDate = NSDate(timeIntervalSinceNow: delayBeforeDelivering)

let notificationcenter = NSUserNotificationCenter.defaultUserNotificationCenter()

notificationcenter.scheduleNotification(notification)

notificationcenter.performSelector("removeDeliveredNotification:",
    withObject: notification,
    afterDelay: (delayBeforeDelivering + delayBeforeDismissing))

答案 1 :(得分:1)

您可以使用removeDeliveredNotification:或removeAllDeliveredNotifications与计时器

// Clear a delivered notification from the notification center. If the notification is not in the delivered list, nothing happens.
- (void)removeDeliveredNotification:(NSUserNotification *)notification;

// Clear all delivered notifications for this application from the notification center.
- (void)removeAllDeliveredNotifications;

OS X(10.8及更高版本)

答案 2 :(得分:0)

  

Blockquote有没有办法可以在2秒后自动关闭/隐藏它?

不,您在OSX 10.11之前没有任何此类选项,可能将来Apple可能提供。

用户可以通过三种方式自定义NSUserNotification,也称为低吼通知:

  1. 横幅
  2. 警报
  3. 您作为开发人员无法控制系统设置。这取决于用户启用或禁用并选择他喜欢的通知类型。

    如果您希望向用户显示任何提醒,您可以创建自己的提醒窗口并在该角落显示。您可以将计时器设置为关闭,或者提供操作按钮以在需要时关闭它。

    更新1: Cocoa提供NSWindow& NSPanel(HUD和普通小组)。您可以根据需要自定义窗口或面板。检查有多种选项可以帮助您根据您的要求进行表单。

    如果你不能得到,说你想要一个圆角,那么你需要自定义窗口/视图等。