我该如何通过编程更改UIButton的Voiceover值?

6

我在InterfaceBuilder中创建了一个UISwitch来切换音频的开关。这个开关工作得很好,但我想把Voiceover读出的当前值'0'和'1'改为'关闭'和'打开'。我的代码如下:

import UIKit

class AudioStreamTableViewCell: UITableViewCell {
    weak var controller: EventDetailsViewController!
    weak var audioInterface: EventAudioInterface? { didSet { if self.audioInterface !== oldValue { self.updateUI() }}}
    func updateUI() {}
    override func awakeFromNib() {
        super.awakeFromNib()
        self.updateUI()
    }

}

class MuteStreamTableViewCell: AudioStreamTableViewCell {
    static let identifier = "MuteStreamTableViewCell"

    @IBOutlet var muteSwitch: UISwitch!

    override func updateUI() {
        self.muteSwitch.isOn = self.audioInterface?.muted ?? false
    }

    @IBAction func switchChanged(_ muteSwitch: UISwitch) {
        self.controller.setMuted(muteSwitch.isOn, on: self.audioInterface)

        if muteSwitch.isOn {
            self.muteSwitch.accessibilityValue = "on"
        } else {
            self.muteSwitch.accessibilityValue = "off"
        }
    }

}

语音指南 (Voiceover) 仍在说 '0' 和 '1',我做错了什么吗?
谢谢!!

这意味着您可能想尝试设置accessibilityLabel而不是:https://developer.apple.com/documentation/objectivec/nsobject/1615181-accessibilitylabel - Mike Taverne
当我这样做时,它会更改Voiceover所说的标签字符串,覆盖我在IB中设置的标签(“静音开关”)。也就是说,口头标签现在被替换为“开”或“关”,而开关值仍然报告为“0”或“1”。 - Manelion
就此而言,VoiceOver在我的应用程序以及整个iOS中宣布开关的值为开/关,而不是0/1。 - Jordan H
1个回答

9

Swift 4.2

我不得不继承 UISwitch 并重写 accessibilityValue

class AccessibilityUiSwitch: UISwitch {
    override var accessibilityValue: String? {
        get {
            return isOn ? "on" : "off"
        }
        set {
            self.accessibilityValue = newValue
        }
    }
}

1
我一直困惑了很长时间。这个方法简直太有效了! - letsbondiway
1
可以,我之前也让它读过0和1。 - Lukasz D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接