Я бы хотел изменить текст кнопок «закрыть» и «действие» для своих уведомлений в Центре уведомлений на MacOS Catalina.
Я знаю, что это было возможно с NSUserNotification otherButtonTitle
и actionButtonTitle
, но это устарело. Я не могу найти, как сделать эквивалентный код с новым UNUserNotificationCenter API.
Я могу добавить UNNotificationAction
к UNNotificationCategory
, но это не меняет значение по умолчанию кнопки закрытия / действия.
Кто-нибудь знает, как это сделать на MacOS?
Точнее, с помощью NSUserNotification API, я использую код:
void NSOsxUserNotification::postNotification()
{
auto notif = [[[NSUserNotification alloc] init] autorelease];
notif.otherButtonTitle = [NSString stringWithCString:m_dict->getShowText().c_str() encoding:NSUTF8StringEncoding];
notif.actionButtonTitle = [NSString stringWithCString:m_dict->getNotNowText().c_str() encoding:NSUTF8StringEncoding];
notif.title = [NSString stringWithCString:m_title.c_str() encoding:NSUTF8StringEncoding];
notif.informativeText = [NSString stringWithCString:m_message.c_str() encoding:NSUTF8StringEncoding];
notif.hasActionButton = true;
NSMutableArray* additionalActions = [NSMutableArray array];
[additionalActions addObject: [NSUserNotificationAction actionWithIdentifier:@"Later" title:[NSString stringWithCString:m_dict->getLaterText().c_str() encoding:NSUTF8StringEncoding]]];
[additionalActions addObject: [NSUserNotificationAction actionWithIdentifier:@"Never" title:[NSString stringWithCString:m_dict->getNeverText().c_str() encoding:NSUTF8StringEncoding]]];
notif.additionalActions = additionalActions;
[notif setValue:@YES forKey:@"_alwaysShowAlternateActionMenu"];
[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notif];
}
И он дает желаемый результат: Уведомление с API NSUserNotification
Теперь мне нужно использовать новый API UNUserNotificationCenter :
UNOsxUserNotification::UNOsxUserNotification(dictionary::IDictionaryPtr dict) : OsxUserNotification(dict)
{
auto handler = [[UNNotificationCentreDelegate alloc] initialise: this];
m_notificationCentre = handler;
[[UNUserNotificationCenter currentNotificationCenter] setDelegate:handler];
auto showAction = [UNNotificationAction actionWithIdentifier:@"SHOW_ACTION" title:[NSString stringWithCString:m_dict->getShowText().c_str() encoding:NSUTF8StringEncoding] options:UNNotificationActionOptionForeground];
auto notNowAction = [UNNotificationAction actionWithIdentifier:@"NOT_NOW_ACTION" title:[NSString stringWithCString:m_dict->getNotNowText().c_str() encoding:NSUTF8StringEncoding] options:UNNotificationActionOptionNone];
auto laterAction = [UNNotificationAction actionWithIdentifier:@"LATER_ACTION" title:[NSString stringWithCString:m_dict->getLaterText().c_str() encoding:NSUTF8StringEncoding] options:UNNotificationActionOptionNone];
auto neverAction = [UNNotificationAction actionWithIdentifier:@"NEVER_ACTION" title:[NSString stringWithCString:m_dict->getNeverText().c_str() encoding:NSUTF8StringEncoding] options:UNNotificationActionOptionNone];
auto publicationCategory = [UNNotificationCategory categoryWithIdentifier:@"NEW_PUBLICATION_CATEGORY" actions:@[showAction, notNowAction, laterAction, neverAction] intentIdentifiers:@[] options:UNNotificationCategoryOptionCustomDismissAction];
auto center = [UNUserNotificationCenter currentNotificationCenter];
[center setNotificationCategories:[NSSet setWithObjects:publicationCategory, nil]];
}
void UNOsxUserNotification::publicNotification()
{
auto content = [[[UNMutableNotificationContent alloc] init] autorelease];
content.title = [NSString stringWithCString:m_title.c_str() encoding:NSUTF8StringEncoding];
content.body = [NSString stringWithCString:m_message.c_str() encoding:NSUTF8StringEncoding];
content.categoryIdentifier = @"NEW_PUBLICATION_CATEGORY";
auto request = [UNNotificationRequest requestWithIdentifier:@"NEW_PUBLICATION_REQUEST_ID" content:content trigger:nil];
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
if (error)
{
// Log error
return;
}
onDeliverNotify();
}];
}
К сожалению, он не дает желаемого результата: Уведомление с UNUserNotification API
Я не хочу закрыть и действия текст, я хочу заменить их.