Swift 4 中的 NSAccessibilityRadioButton 实现

NSAccessibilityRadioButton implementation in Swift 4

我正在尝试创建一个 NSAccessibilityRadioButton 元素,但我遇到了...比方说出现意外错误。这是我正在做的

  1. 我有一个基础 class 的 NSAccessibilityElement:

    class AccessibilityElementPrototype: NSAccessibilityElement {
      .
      .
      .
    }
    
  2. 我有另一个 class,它应该像这样实现 NSAccessibilityRadioButton 协议:

    class AccessibilityElementTab: AccessibilityElementPrototype, NSAccessibilityRadioButton {
        func accessibilityValue() -> NSNumber? {
            ...
        }
    }
    

问题是我收到以下错误:

Method 'accessibilityValue()' with Objective-C selector 'accessibilityValue' conflicts with method 'accessibilityValue()' from superclass 'NSAccessibilityElement' with the same Objective-C selector

如果有人遇到过这样的问题并且有解决办法,请分享。

我真的很高兴你问这个问题,因为我以为我疯了。

令人难以置信的是,某些 NSAccessibility 协议似乎在 Swift 中被破坏了。我已经打开了 Apple 的 bug,我鼓励你也这样做。与此同时,解决这个问题相当容易,只是不方便。

您可以直接使用 NSView 方法实现相同的结果:

view.setAccessibilityRole(...)
view.setAccessibilityElement(true)

@objc override func accessibilityValue() -> Any? {
    ...
}

不要忘记将 accessibiltyElement 属性 设置为 true。起初我没有意识到这是必要的,也无法弄清楚为什么什么都没有出现。 Accessibility Inspector 的 Show Ignored Elements 帮助了我。