Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Отключить VoiceOver для выбора UIButton / UITableViewCell / UICollectionViewCell

Автор вопроса: MaverickОтветов: 2

Когда VoiceOver включен, когда фокус переходит на _1 _ / _ 2 _ / _ 3_, VoiceOver считывает его метку доступности один раз.

Затем, как только пользователь дважды коснется этого _4 _ / _ 5 _ / _ 6_, VoiceOver снова прочитает ту же метку доступности, помимо выполнения действий (навигации и т. Д.) При выборе _7 _ / _ 8 _ / _ 9_.

Я много искал, но не смог найти способ остановить / отключить метку доступности чтения VoiceOver при выборе _10 _ / _ 11 _ / _ 12_.

Любая помощь будет высоко ценится.

  • Вы когда-нибудь находили на это ответ? Я столкнулся с той же проблемой. Jan 22.02.2017
  • Приносим извинения за задержку с ответом. Я справился с этим путем принудительного выбора другого элемента доступности. Например, после выбора из TableView / CollectionView я должен перейти к новому пользовательскому интерфейсу. Что я делаю, так это то, что я принудительно выбираю кнопку левой панели на панели навигации нового пользовательского интерфейса сразу после завершения навигации. Выбор осуществляется с помощью UIAccessibilityPostNotification. Таким образом, он начинает читать только что выбранный элемент. См. Эту ссылку для выбора Maverick 05.03.2017

iosaccessibilityvoiceover

Ответы

Ответ 1 · Mark

Swift 5

Что сработало для меня, так это установка myElementIWantSilent.accessibilityTraits = .none

РЕДАКТИРОВАТЬ: я должен отметить, что они также присутствуют:

viewContainingSilentElement.isAccessibilityElement = true
viewContainingSilentElement.accessibilityTraits = .image
viewContainingSilentElement.accessibilityLabel = "some text i want read aloud"

iPhone 8
iOS 14.5.1
XCode 12.5

Ответ 2 · рейтинг -1 · XLE_22

Давайте посмотрим, как остановить чтение специальных возможностей VoiceOver для элементов UIButton и UITableViewCell.

UIBUTTON: просто создайте свой собственный класс кнопки и переопределите _ 3_ метод.

class BoutonLabelDoubleTap: UIButton {

    override func accessibilityActivate() -> Bool {
        accessibilityLabel = ""
        return true
    }
}

UITABLEVIEWCELL: необходимо выполнить два шага.

  • Создайте собственный UIAccessibilityElement, переопределяющий метод accessibilityActivate .

    class TableViewCellLabelDoubleTap: UIAccessibilityElement {
    
        override init(accessibilityContainer container: Any) {
            super.init(accessibilityContainer: container)
        }
    
        override var accessibilityTraits: UIAccessibilityTraits {
            get { return UIAccessibilityTraitNone }
            set {   }
        }
    
        override func accessibilityActivate() -> Bool {
            accessibilityLabel = ""
            return true
        }
    }
    
  • Используйте созданный ранее класс для реализации ячеек табличного представления в контроллере представления.

    class TestButtonTableViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
    
        @IBOutlet weak var myTableView: UITableView!
        @IBOutlet weak var bottomButton: UIButton!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            myTableView.delegate = self as UITableViewDelegate
            myTableView.dataSource = self as UITableViewDataSource
        }
    
        func numberOfSections(in tableView: UITableView) -> Int {
            return 1
        }
    
        func tableView(_ tableView: UITableView,
                       numberOfRowsInSection section: Int) -> Int {
            return 2
        }
    
        func tableView(_ tableView: UITableView,
                       cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
            let zeCell = tableView.dequeueReusableCell(withIdentifier: "myPersoCell",
                                                       for: indexPath)
    
            zeCell.accessibilityElements = nil
            var elements = [UIAccessibilityElement]()
    
            let a11yEltCell = TableViewCellLabelDoubleTap(accessibilityContainer: zeCell)
            a11yEltCell.accessibilityLabel = "cell number " + String(indexPath.row)
            a11yEltCell.accessibilityFrameInContainerSpace = CGRect(x: 0,
                                                                    y: 0,
                                                                    width: zeCell.contentView.frame.size.width,
                                                                    height: zeCell.contentView.frame.size.height)
            elements.append(a11yEltCell)
            zeCell.accessibilityElements = elements
    
            return zeCell
        }
    }
    

Я не пробовал использовать UICollectionViewCell, но это должно быть такое же обоснование, что и UITableViewCell.

Следуя этим фрагментам кода, теперь вы можете решить, должен ли VoiceOver перестать считывать нужные метки элементов при выборе.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы