如何在Mac上使VoiceOver宣布ValueChanged通知?

时间:2019-11-26 14:46:19

标签: swift macos accessibility appkit voiceover

下面我为自定义NSView提供了一个非常简单的测试代码,但是VoiceOver(VO)承认titleChanged但忽略了valueChanged通知。

我有两个执行changeTitle和changeValue的快捷方式。

在确保VO光标位于元素上之后,如果我按下changeTitle的快捷方式,VO将宣布新标题。

但是,如果我按下changeValue的快捷键,VO则什么也没说。

如果我手动重新调整VO光标的位置,它将读取新值。

我可以通过发送layoutChanged或announcementRequested通知来强制VO发言,但是我想知道为什么VO忽略valueChanged通知吗?

下面是测试代码,非常感谢您的帮助!

class CustomView:NSView { 

    var val = "Value" 
    var title = "Title" 

    override func isAccessibilityElement() -> Bool { 
        return true 
    } 

    override func accessibilityRole() -> NSAccessibility.Role? { 
        return .button 
    } 

    override func accessibilityTitle() -> String? { 
        return title 
    } 

    func changeTitle() { 
        title = "title \(Int.random(in:1...10))" 
        NSAccessibility.post(element: self, notification: .titleChanged) 
    } 

    override func accessibilityValue() -> Any? { 
        return val 
    } 

    func changeValue() { 
        val = "Value \(Int.random(in:1...10))" 
        NSAccessibility.post(element: self, notification: .valueChanged) 
    } 

}  

0 个答案:

没有答案