NSUserNotification not showing action button

久未见 提交于 2019-12-03 02:13:02

问题


I'm using this code:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
    NSUserNotification *notification = [[NSUserNotification alloc] init];
    [notification setTitle: @"Title"];
    [notification setSubtitle: @"Subtitle"];
    [notification setInformativeText: @"Informative Text"];

    [notification setHasActionButton: YES];
    [notification setActionButtonTitle: @"Action Button"];
    [notification setOtherButtonTitle: @"Other Button"];

    [notification setSoundName: NSUserNotificationDefaultSoundName];

    [notification setDeliveryDate: [NSDate dateWithTimeIntervalSinceNow: 10]];
    [[NSUserNotificationCenter defaultUserNotificationCenter] scheduleNotification: notification];
}

And I'm getting, without fail,

No action button, or other button.


回答1:


As already stated in a previous answer, the notification type needs to be set to alert for the action button to be shown. If you want to set the default notification style of your app to alert, you need to define the key NSUserNotificationAlertStyle in info.plist with the value alert.

See Apple's info.plist keys reference for more details:

NSUserNotificationAlertStyle Specifies whether the notification style should be banners, alerts, or none. The default value is banners, which is the recommended style.




回答2:


And here was the answer.

Thanks again to #macdev on freenode.

The selection needs to be "Alerts" to have buttons.




回答3:


As a contrary instance for other answers we can use iTunes - it still showing "Skip" button even when we setup alert style to banners. So I continued searching and found this github repo where Indragie Karunaratne provide some useful additional properties in NSUserNotification private headers. You can check for full list of the properties in the NSUserNotification_Private.h file, but actual for showing buttons in banner notification style is

@property BOOL _showsButtons; // @dynamic _showsButtons;

so you can just add this line to you code

[notification setValue:@YES forKey:@"_showsButtons"];

and your notification action button will become independent on alert style.




回答4:


magic command based on PARTISAN's reply is:

notification.set_showsButtons_(True)

cha-ching :)



来源:https://stackoverflow.com/questions/11676017/nsusernotification-not-showing-action-button

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!