带有按钮特性的 UIAccessibilityElement 在画外音按钮后添加 "one of one"

UIAccessibilityElement with button trait adding "one of one" after voice over speaks button

我正在使用 UIAccessibilityElement 将来自多个标签和按钮的信息封装在自定义 UITableViewCell 中。当启用画外音并且用户滑动浏览每个元素时,我希望将特定元素组合在一起。例如,不是说 "Favorite Food" 然后用户必须再次滑动才能听到 "Pizza" 它会说 "Favorite Food Pizza."

在我的子类单元格中,我通过覆盖 accessibilityElements 来实现这一点。但是,当我将 UIButton 添加到 accessibilityElements 时遇到问题。在下面的代码中,我创建了 viewProfileButtonAccessibilityElement。我添加了可访问性标签和特征 .button。当旁白说出时,它说 "View Profile Picture button one of one." 我不知道 "one of one" 是从哪里来的。知道是什么导致 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
    }
  }

I can't figure out where "one of one" is coming from. Any idea what is causing Voice Over to add "one of one" after speaking the word button?

您在具有 .button 特征的单元格中创建的每个 UIControl 按钮都将按照您提到的方式发声。

无论在 tableviewcell 中创建的按钮数量如何,所有按钮都将使用相同的后缀发声,表明它们所属的单元格以及该部分中的单元格总数。

"one of one" 在您的示例中意味着您的按钮位于第一个单元格中,并且您的部分中只有一个单元格。

例如,如果您在包含十个单元格的部分的第三个单元格中创建两个按钮,您会听到两个按钮的后缀 "three of ten"

我希望这个解释足够清楚理解你的"one of one"来自哪里