代码之家  ›  专栏  ›  技术社区  ›  an0

如何使VoiceOver将UITableView视为单个可访问性元素?

  •  0
  • an0  · 技术社区  · 6 年前

    在特殊情况下,我需要 UITableView 作为一个单一的可访问性元素,而不是将其单元格暴露于 VoiceOver .

    我试着设置它 isAccessibilityElement true accessibilityLabel 但没用。

    0 回复  |  直到 6 年前
        1
  •  1
  •   XLE_22    6 年前

    我想要一个 UITableView 作为一个单一的可访问性元素,而不是将其单元格暴露于 VoiceOver .

    不幸的是,
    您可以在不发出警告的情况下对其进行编码,因为您处理的是一个非正式的协议,但它不会被解释为 :一团糟,因为你在 tableView label 例如,但在这里不起作用。
    我没有技术证据,但我认为 不是一个可访问的元素,只有它的单元格应该是

    我尝试将其isAccessibilityElement设置为true并分配其accessibilityLabel,但它不起作用[…]当我左右滑动时,VoiceOver会穿过单元格,不会发出表视图的 accessibilityLabel .

    UITableView公司 可以看作是一个容器,其中嵌入了许多元素 (它的细胞) 而且,按原样,不能同时拥有父视图 (表格视图) (它的细胞) both accessible 带画外音:可以选择表视图或其单元格。

    如果不想在单元格中滑动,请在下面插入代码片段:

    myTableViewInsideTheCell.accessibilityElementsHidden = true
    

    画外音 被告知表视图中的元素不能被解释。
    现在,由于表视图不能被视为可访问的元素,只需在表视图单元格中创建一个:

    let a11yElt = UIAccessibilityElement(accessibilityContainer: myTableViewCell.contentView)
    a11yElt.accessibilityFrameInContainerSpace = myTableViewInsideTheCell.frame
    a11yElt.accessibilityTraits = .staticText
    a11yElt.accessibilityLabel = "my table view inside the cell is now accessible."
    
    myTableViewCell.accessibilityElements = [a11yElt]
    

    我认为有很多其他的方法可以达到你的目标,但是根据这个原理,你可以 使VoiceOver将UITableView视为单个可访问性元素 .