NSUserNotification未显示操作按钮

时间:2012-07-26 18:46:49

标签: cocoa osx-mountain-lion nsusernotification

我正在使用此代码:

- (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];
}

我得到了,但没有失败,

enter image description here

没有操作按钮或其他按钮。

4 个答案:

答案 0 :(得分:49)

如前面的答案中所述,需要将通知类型设置为警告要显示的操作按钮。如果您要将应用的默认通知方式设置为提醒,则需要在info.plist中定义键 NSUserNotificationAlertStyle ,其值为提示

有关详细信息,请参阅Apple的info.plist keys reference

  

NSUserNotificationAlertStyle 指定通知样式应为横幅提醒还是。默认值为banners,这是推荐的样式。

答案 1 :(得分:26)

这就是答案。

再次感谢freenode上的#macdev。

enter image description here

选择需要是“提醒”才能有按钮。

答案 2 :(得分:17)

作为其他答案的相反例子,我们可以使用iTunes - 即使我们为横幅设置警报样式,它仍然显示“跳过”按钮。所以我继续搜索并找到this github repo其中Indragie Karunaratne在NSUserNotification私有标头中提供了一些有用的附加属性。您可以在 NSUserNotification_Private.h 文件中检查属性的完整列表,但实际用于显示横幅通知样式中的按钮

@property BOOL _showsButtons; // @dynamic _showsButtons;

因此您只需将此行添加到代码

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

并且您的通知操作按钮将在警报样式上独立。

答案 3 :(得分:1)

基于PARTISAN回复的魔术命令是:

notification.set_showsButtons_(True)

cha-ching:)