14

このアプリでは、通知センターの通知をアラート スタイルで表示しています。

通知の表示は正常に機能し、ユーザーが通知をクリックするか、アクション ボタンをクリックして通知を操作すると、コールバックが取得されます。

ただし、ユーザーが通知の [その他] ボタンをクリックしたときにコールバックまたはイベントを取得することに関心があります。私は、MAC OS が利用可能な更新ダイアログを表示するときにこれを行うのを見てきました。

OS X update available アラートについては、次の画像を参照してください。

ここに画像の説明を入力

私はこれをインターネットで検索しただけでなく、通知センターのドキュメントthisthisも調べました。

文書化されていない API はありますか? またはその他の(閉じる)ボタンのクリックを検出するためのカスタムメカニズム?

4

4 に答える 4

1

スウィフト 2.3 では:

func userNotificationCenter(center: NSUserNotificationCenter, didDeliverNotification notification: NSUserNotification) {

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
        var notificationStillPresent: Bool
        repeat {
            notificationStillPresent = false
            for nox in NSUserNotificationCenter.defaultUserNotificationCenter().deliveredNotifications {
                if nox.identifier == notification.identifier {
                    notificationStillPresent = true
                    break
                }
            }

            if notificationStillPresent {
                let _ = NSThread.sleepForTimeInterval(0.20)
            }
        } while notificationStillPresent

        dispatch_async(dispatch_get_main_queue()) {
            self.notificationHandlerFor(notification)
        }
    }
}

PS: これは、いくつかのケースで発生する可能性のある終了イベントを検出する方法であることにも注意してください。

  1. をクリックしotherButtonて閉じます
  2. Clear All通知センターのボタンをクリックします

PS 2: を使用している場合、たとえば 1 分、アレイdeliveryRepeatIntervalには複数の通知があり、 1 つだけが表示されます。deliveredNotifications解任は、複数のコールバックをトリガーします。

PS 3: クリックするactionButtonと、解雇コールバックもトリガーされます

于 2016-10-26T08:50:57.207 に答える
1

これは私を助けました

func userNotificationCenter(_ center: NSUserNotificationCenter, didActivate notification: NSUserNotification) {
    switch (notification.activationType) {
    case .none:
        print("none CLicked")
        break
    case .actionButtonClicked:
        print("Additional Action Clicked")
        break
    case .contentsClicked:
        print("contents CLicked")
        break
    case .replied:
        print("replied Action Clicked")
        break
    case .additionalActionClicked:
        print("Additional  MENU  Action Clicked")
        break
    }
于 2018-01-19T15:49:17.703 に答える