我正在为我的iOS应用添加辅助功能。我看到一个特定的情况,当我点击一个有isAccessibilityElement = false
的UIView,并且它的所有祖先视图也都是isAccessibilityElement = false
时,VoiceOver会说出这个视图中兄弟的文本 - 这个视图的父母的另一个孩子。在Accessibility Inspector中,当我将鼠标悬停在此视图上时,兄弟姐妹会亮起来。
我不明白一些不在我正在点击的层次结构中的视图如何用于VoiceOver文本。我没有看到iOS 11中记录的任何行为。怎么会发生这种情况?
编辑:我创建了一个带有UITableView的简单项目,其中包含UITableViewCell对象,每个对象都包含一个UILabel。点击UITableViewCell(在UILabel之外)将读取其中的UILabel。如何禁用该行为,以便只触发标签本身而不是其包含的UITableViewCell,将读取标签?
表视图单元格(容器)及其内容(子项)不能一起访问(解释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
}
遵循这些代码片段将允许选择位于表格视图单元格内的标签并根据需要读出其内容。