在UIButton / UITableViewCell / UICollectionViewCell选择上禁用VoiceOver

时间:2016-05-10 14:34:59

标签: ios accessibility voiceover

启用VoiceOver后,当焦点出现在UIButton / UITableViewCell / UICollectionViewCell时,VoiceOver会读取它的辅助功能标签一次。

然后,只要用户双击选择UIButton / UITableViewCell / UICollectionViewCell,VoiceOver就会再次读取相同的辅助功能标签,同时在{{1}上执行操作(导航等) } / UIButton / UITableViewCell选择。

我搜索了很多,但无法在UICollectionViewCell / UIButton / UITableViewCell选择中找到停止/停用VoiceOver阅读辅助功能标签的方法。

任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

让我们看看如何停止UIButtonUITableViewCell元素的VoiceOver辅助功能读取。

UIBUTTON :只需创建自己的按钮类并覆盖accessibilityActivate方法。

class BoutonLabelDoubleTap: UIButton {

    override func accessibilityActivate() -> Bool {
        accessibilityLabel = ""
        return true
    }
}

UITABLEVIEWCELL :要遵循的两个步骤。

  • 创建一个覆盖accessibilityActivate方法的自定义UIAccessibilityElement

    class TableViewCellLabelDoubleTap: UIAccessibilityElement {
    
        override init(accessibilityContainer container: Any) {
            super.init(accessibilityContainer: container)
        }
    
        override var accessibilityTraits: UIAccessibilityTraits {
            get { return UIAccessibilityTraitNone }
            set {   }
        }
    
        override func accessibilityActivate() -> Bool {
            accessibilityLabel = ""
            return true
        }
    }
    
  • 使用先前创建的类在视图控制器中实现表格视图单元。

    class TestButtonTableViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
    
        @IBOutlet weak var myTableView: UITableView!
        @IBOutlet weak var bottomButton: UIButton!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            myTableView.delegate = self as UITableViewDelegate
            myTableView.dataSource = self as UITableViewDataSource
        }
    
        func numberOfSections(in tableView: UITableView) -> Int {
            return 1
        }
    
        func tableView(_ tableView: UITableView,
                       numberOfRowsInSection section: Int) -> Int {
            return 2
        }
    
        func tableView(_ tableView: UITableView,
                       cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
            let zeCell = tableView.dequeueReusableCell(withIdentifier: "myPersoCell",
                                                       for: indexPath)
    
            zeCell.accessibilityElements = nil
            var elements = [UIAccessibilityElement]()
    
            let a11yEltCell = TableViewCellLabelDoubleTap(accessibilityContainer: zeCell)
            a11yEltCell.accessibilityLabel = "cell number " + String(indexPath.row)
            a11yEltCell.accessibilityFrameInContainerSpace = CGRect(x: 0,
                                                                    y: 0,
                                                                    width: zeCell.contentView.frame.size.width,
                                                                    height: zeCell.contentView.frame.size.height)
            elements.append(a11yEltCell)
            zeCell.accessibilityElements = elements
    
            return zeCell
        }
    }
    

我还没有尝试过UICollectionViewCell,但它的原理应与UITableViewCell相同。

按照这些代码段,您现在可以确定VoiceOver是否应在选择时停止读取所需的元素标签

答案 1 :(得分:0)

Swift 5

对我有用的是设置 myElementIWantSilent.accessibilityTraits = .none

编辑:我应该注意到这些也存在:

viewContainingSilentElement.isAccessibilityElement = true
viewContainingSilentElement.accessibilityTraits = .image
viewContainingSilentElement.accessibilityLabel = "some text i want read aloud"

iPhone 8
iOS 14.5.1
Xcode 12.5