我正在为我的iOS应用添加可访问性。我看到一种特定的情况,当我点击具有isAccessibilityElement = false
的UIView,并且其所有祖先视图也是isAccessibilityElement = false
时,VoiceOver会说出该视图的兄弟姐妹-此视图的父级的另一个子级。并且在Accessibility Inspector中,当我将鼠标悬停在此视图上时,同级点亮。
我不明白如何将不在我所点击的视图中的某个视图用于VoiceOver文本。我没有看到针对iOS 11记录的此类行为。
编辑:我用UITableView创建了一个简单项目,其中包含UITableViewCell对象,每个对象都包含一个UILabel。点击UITableViewCell(位于UILabel外部)将读取其中的UILabel。如何禁用该行为,以便仅点击标签本身(而不是包含UITableViewCell的标签)会读取标签?
答案 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
}
遵循这些代码段,可以选择位于表格视图单元格内的标签,并根据需要读出其内容。