Как реализовать accessibilityCustomActions для VoiceOver на Mac? - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть кнопка, которая реагирует на различные щелчки мыши (обычный щелчок, щелчок правой кнопкой мыши, управление + щелчок, опция + щелчок, команда + щелчок ...) для отображения различных всплывающих меню.Поскольку пользователям VoiceOver было бы неудобно использовать физическую мышь, я хотел бы сопоставить их с различными действиями VoiceOver.

Однако я не получаю ожидаемых результатов.Может ли кто-нибудь помочь мне лучше понять, чего мне не хватает?Вот что я обнаружил до сих пор.

Если я подкласс NSButton и переопределить следующие функции, они работают нормально.За исключением того, что есть одна странная вещь.Если я нажимаю vo + command + space, чтобы вызвать список доступных действий, VoiceOver говорит «Действие 1» вместо «Показать меню».

override func accessibilityPerformPress() -> Bool { 
    print("Pressed!") 
    return true 
}

override func accessibilityPerformShowAlternateUI() -> Bool { 
    print("Show Alternate UI") 
    return true 
} 

override func accessibilityPerformShowMenu() -> Bool { 
    print("Show Menu") 
    return true 
} 

В том же подклассе NSButton, если я также переопределил функцию accessibilityCustomActions, "Do Something" никогда не появляется в списке доступных действий, когда я нажимаю vo + command + space.

override func accessibilityCustomActions() -> [NSAccessibilityCustomAction]? { 
    let custom = NSAccessibilityCustomAction(name: "Do Something", target: self, selector: #selector(doSomething)) 
    return [custom] 
} 

@objc func doSomething() -> Bool { 
    print("Done something.") 
    return true 
} 

Если я подкласс NSView вместо NSButton и переопределю те же функции из # 1, все работает нормально.В отличие от первого случая, даже VoiceOver правильно говорит «Показать меню» для действия с accessibilityPerformShowMenu вместо «Действие 1».

в том же подклассе NSView, если я переопределю accessibilityCustomActions вместе с accessibilityPerformPress, accessibilityPerformShowMenu или accessibilityPerformShowAlternateUI, "Do Something" не появится в списке действий.

Однако, «Do Something» появляется в списке действий, если я просто перезаписываю accessibilityCustomActions без accessibilityPerformPress, accessibilityPerformShowMenu и accessibilityPerformShowAlternateUI.

Я попытался создать еще одно действие с именем «Press», которое делает то же самое при нажатии vo + пробел, и включая возвращаемое значение accessibilityCustomActions.Тем не менее, Vo + space не вызывает действие.Вместо этого мне пришлось нажать vo + команда + пробел, а затем выбрать «Нажать».Я предполагаю, что действие просто имеет название «Пресса», но на самом деле оно не связано с vo + space.Я не уверен, как я могу на самом деле сделать это конкретное пользовательское действие, чтобы ответить на vo + space.

Буду признателен, если кто-нибудь поможет мне реализовать accessibilityCustomActions, а также accessibilityPerformPress, accessibilityPerformShowMenu и accessibilityPerformShowAlternateUI вместе в NSButton.

Большое спасибо!

...