UIAccessibilityElement с чертой кнопки, добавляющей "один из одного" после кнопки закадрового голоса - PullRequest
1 голос
/ 26 марта 2019

Я использую UIAccessibilityElement для инкапсуляции информации из нескольких меток и кнопок в пользовательском UITableViewCell. Когда функция Voice Over включена и пользователь пролистывает каждый элемент, я хочу, чтобы определенные элементы были сгруппированы вместе. Например, вместо того, чтобы говорить «Любимая еда», пользователь должен снова провести пальцем, чтобы услышать «Пицца», он будет говорить «Пицца из любимых блюд».

В моей подклассной ячейке это работает путем переопределения accessibilityElements. Однако у меня возникла проблема при добавлении UIButton для accessibilityElements. В коде ниже я создаю viewProfileButtonAccessibilityElement. Я добавляю метку доступности и черту .button. Когда говорит Voice Over, он говорит: «Просмотреть изображение профиля кнопка один из одного». Я не могу понять, откуда взялся «один из одного». Любая идея, что заставляет Voice Over добавить «один из одного» после произнесения слова кнопки?

  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
    }
  }

1 Ответ

0 голосов
/ 09 апреля 2019

Каждая кнопка UIControl, которую вы создаете в ячейке с чертой .button, будет озвучена так, как вы упомянули.

Независимо от количества созданных кнопок в ячейке просмотра таблицы, все будут озвучены с одинаковым суффиксом , указывающим ячейку, к которой они принадлежат, и общее количество ячеек в разделе.

"one of one" в вашем примере означает, что ваша кнопка находится в первой ячейке, и что в вашем разделе есть только одна ячейка.

Например, если вы создадите две кнопки в третьей ячейке секции, содержащей десять ячеек, вы услышите суффикс «три из десяти» для ваших двух кнопок.

Надеюсь, это объяснение будет достаточно ясным, чтобы понял, откуда ваш "один из одних" исходит от , как требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...