Как я могу определить путь индекса для в настоящее время сосредоточенного UITableViewCell, используя Voice Over? - PullRequest
1 голос
/ 20 февраля 2020

У меня есть динамический c UITableView. Для каждой ячейки я добавляю UIAccessibilityCustomAction. Когда срабатывает действие, мне нужно знать путь индекса, чтобы я мог соответствующим образом отреагировать и обновить свою модель.

В tableView(_:cellForRowAt:) Я добавляю свой UIAccessibilityCustomAction вот так ...

cell.accessibilityCustomActions = [
    UIAccessibilityCustomAction(
        name: "Really Bad Name",
        target: self,
        selector: #selector(doSomething)
    )
]

Я пытался использовать UIAccessibility.focusedElement безрезультатно ...

@objc private func doSomething() {
    let focusedCell = UIAccessibility.focusedElement(using: UIAccessibility.AssistiveTechnologyIdentifier.notificationVoiceOver) as! UITableViewCell
    // Do something with the cell, like find the indexPath.
}

Проблема в том, что приведение к ячейке не удалось. Отладчик говорит, что тип возвращаемого значения на самом деле UITableTextAccessibilityElement, о котором я не смог найти никакой информации.

1 Ответ

1 голос
/ 20 февраля 2020

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

Лучший способ достичь своей цели - использовать UIAccessibilityFocus неофициальный протокол методов, переопределяя их в вашем объекте напрямую (класс ячеек табличного представления в вашем случае) : вы сможете поймать нужный путь индекса, когда пользовательское действие запускается.

Я предлагаю взглянуть на этот ответ , касающийся изменения фокуса доступности, который содержит подробное решение с фрагментами кода, если это необходимо. 101

Пример фрагмента ...

class SomeCell: UITableViewCell

    override open func accessibilityElementDidBecomeFocused() {
        // Notify view controller however you want (delegation, closure, etc.)
    }

}
...