VoiceOver正在寻找附近的可读元素以进行阅读?

时间:2018-06-22 13:55:12

标签: ios accessibility voiceover

我正在为我的iOS应用添加可访问性。我看到一种特定的情况,当我点击具有isAccessibilityElement = false的UIView,并且其所有祖先视图也是isAccessibilityElement = false时,VoiceOver会说出该视图的兄弟姐妹-此视图的父级的另一个子级。并且在Accessibility Inspector中,当我将鼠标悬停在此视图上时,同级点亮。

我不明白如何将不在我所点击的视图中的某个视图用于VoiceOver文本。我没有看到针对iOS 11记录的此类行为。

编辑:我用UITableView创建了一个简单项目,其中包含UITableViewCell对象,每个对象都包含一个UILabel。点击UITableViewCell(位于UILabel外部)将读取其中的UILabel。如何禁用该行为,以便仅点击标签本身(而不是包含UITableViewCell的标签)会读取标签?

1 个答案:

答案 0 :(得分:0)

不能同时访问表视图单元格(容器)及其内容(子级) (解释here

请按照下面的步骤回答您的编辑问题,以便仅点击标签本身,而不点击包含UITableViewCell的标签,即可读取标签。

  • 创建自己的UITableViewCell类,包括一个标签。

    class TestTableViewCell: UITableViewCell {
    
        @IBOutlet weak var myLabel: UILabel!
    
        override var accessibilityTraits: UIAccessibilityTraits {
            get { return UIAccessibilityTraitNone }
            set {}
        }
    }
    
  • 在单元实现中将标签定义为UIAccessibilityElement,以包含在其accessibilityElements数组中。

    func tableView(_ tableView: UITableView,
                   cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
            let zeCell = tableView.dequeueReusableCell(withIdentifier: "myPersoCell",
                                                       for: indexPath) as! TestTableViewCell
    
            zeCell.accessibilityElements = nil
    
            var elements = [UIAccessibilityElement]()
    
            let contentA11yElt = UIAccessibilityElement(accessibilityContainer: zeCell)
            contentA11yElt.accessibilityTraits = UIAccessibilityTraitStaticText
            contentA11yElt.accessibilityFrameInContainerSpace = zeCell.contentLabel.frame //To be adapted
            contentA11yElt.accessibilityLabel = "label content"
    
            elements.append(contentA11yElt)
            zeCell.accessibilityElements = elements
    
            return zeCell
        }
    

遵循这些代码段,可以选择位于表格视图单元格内的标签,并根据需要读出其内容