我正在使用UIAccessibilityElement来封装来自自定义UITableViewCell中的多个标签和按钮的信息。启用“配音”并且用户滑过每个元素时,我希望将特定元素组合在一起。例如,用户不必再说“喜欢的食物”,而是必须再次滑动以听到“披萨”,它会说“最喜欢的食物披萨”。
在我的子类单元格中,我通过覆盖accessibilityElements来实现这一点。但是,当我向AccessibilityElements添加UIButton时,我遇到了问题。在下面的代码中,我创建了viewProfileButtonAccessibilityElement。我添加了辅助功能标签和特征.button。当Voice Over说话时,“查看配置文件图片按钮之一”。我无法弄清楚“其中一个”的来源。在说出单词按钮后,知道是什么导致Voice Over添加“one of one”?
private var cachedAccessiblityElements: [Any]?
override var accessibilityElements: [Any]? {
set {
cachedAccessiblityElements = newValue
}
get {
// Return the acessibility elements if we've already created them
if let cachedAccessiblityElements = cachedAccessiblityElements {
return cachedAccessiblityElements
}
var elements = [UIAccessibilityElement]()
if let favoriteFoodTitle = favoriteFoodTitle.text, let favoriteFood = favoriteFood.text {
let favoriteFoodAccessibilityElement = UIAccessibilityElement(accessibilityContainer: self)
favoriteFoodAccessibilityElement.accessibilityLabel = favoriteFoodTitle + " " + favoriteFood
favoriteFoodAccessibilityElement.accessibilityFrameInContainerSpace = self.favoriteFoodTitle.frame.union(self.favoriteFood.frame)
elements.append(favoriteFoodAccessibilityElement)
}
let viewProfileButtonAccessibilityElement = UIAccessibilityElement(accessibilityContainer: self)
viewProfileButtonAccessibilityElement.accessibilityLabel = "View Profile Picture"
viewProfileButtonAccessibilityElement.accessibilityTraits = UIAccessibilityTraits.button
viewProfileButtonAccessibilityElement.accessibilityFrameInContainerSpace = self.viewProfileButton.frame
elements.append(viewProfileButtonAccessibilityElement)
cachedAccessiblityElements = elements
return cachedAccessiblityElements
}
}
您在具有.button
特性的单元格中创建的每个UIControl按钮都将按您提到的方式发出声音。
无论tableviewcell中创建的按钮数量是多少,都将使用相同的后缀进行发声,指示它们所属的单元格以及该部分中的单元格总数。
在您的示例中,“one of one”表示您的按钮位于第一个单元格中,并且您的部分中只有一个单元格。
例如,如果您在包含十个单元格的部分的第三个单元格中创建两个按钮,您将听到两个按钮的后缀“三个十”。
我希望这个解释足够清楚,可以理解你的“一个”来自哪里。