首页 > 解决方案 > 如何在 MacOS 中检测 VoiceOver 是否开启?

问题描述

我正在开发 MacOS 应用程序,但我不知道如何收听辅助功能状态更改(例如,当 VoiceOver 开启或关闭时)。

在 iOS 中,有一个我可以收听的通知,UIAccessibilityVoiceOverStatusDidChangeNotification.

MacOS中是否有等价物?

标签: objective-cmacosaccessibilityvoiceoverscreen-readers

解决方案


事实证明,有一个隐藏的 api 可以收听可访问性通知。你可以听@"NSApplicationDidChangeAccessibilityEnhancedUserInterfaceNotification"

  [center addObserver:self
             selector:@selector(onAccessibilityStatusChanged:)
                 name:@"NSApplicationDidChangeAccessibilityEnhancedUserInterfaceNotification"
               object:nil];

然后在方法中可以查看10.13引入的voiceOverEnabled

if(@available(macOS 10.13, *)) {
    NSWorkspace * ws = [NSWorkspace sharedWorkspace];
    NSLog(@"got notification voiceover enabled ? %d",ws.voiceOverEnabled);
  }

推荐阅读