как изменить текст уведомления о закрытии / действия кнопки на macos catalina - PullRequest
0 голосов
/ 10 января 2020

Я бы хотел изменить текст кнопок «закрыть» и «действие» для своих уведомлений в Центре уведомлений на 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

Я не хочу закрыть и действия текст, я хочу заменить их.

1 Ответ

0 голосов
/ 24 марта 2020

Наконец, по словам Apple:

Нет планов по решению этой проблемы. Обязательно регулярно проверяйте новые выпуски Apple на наличие обновлений, которые могут повлиять на эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...