Когда VoiceOver включен, когда фокус переходит на _1 _ / _ 2 _ / _ 3_, VoiceOver считывает его метку доступности один раз.
Затем, как только пользователь дважды коснется этого _4 _ / _ 5 _ / _ 6_, VoiceOver снова прочитает ту же метку доступности, помимо выполнения действий (навигации и т. Д.) При выборе _7 _ / _ 8 _ / _ 9_.
Я много искал, но не смог найти способ остановить / отключить метку доступности чтения VoiceOver при выборе _10 _ / _ 11 _ / _ 12_.
Любая помощь будет высоко ценится.
Ответ 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 перестать считывать нужные метки элементов при выборе.