我正在尝试将iOS辅助功能支持/配音添加到我的应用中。我的主屏幕有三个主要控件,但第三个控件托管在嵌入式视图控制器中。
我在prepareForSegue中设置了辅助功能元素,并确认嵌入的视图控制器控件都已加载。问题是我仍然只能选择封闭视图控制器中的前两个控件。
self.view.accessibilityElements =
@[
self.cmdMenu, // works
self.collectionView, // works
self.childViewController.peerMenu // doesn't work
];
所有三个视图都是isAccessibilityElement = YES。
我错过了什么吗?我无法想象在同一视图控制器中存在对可访问性元素的限制。
答案 0 :(得分:9)
我发现了我的错误,现在有Voice Over工作了。在这个过程中,我想出了一些我想分享的内容。
self.view.accessibilityElements = @[ _control1, childViewController.view, childViewController2.view]
在子视图控制器中添加所有辅助功能元素。childViewController.view.isAccessibilityElement = NO
。UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self)
告诉UIKit。通知参数(我发送self
的地方)告诉Voice Over在通知完成时应该将光标放在哪里。UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, messageText)
。有一点需要注意,除非没有其他Voice Over正在进行,否则不会大声朗读messageText。你需要自己管理时间。提交了一个bug。 Apple可以让它变得更好。UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, messageText)
,则可以收听UIAccessibilityAnnouncementDidFinishNotification
,但不幸的是,此通知几乎没有任何价值。只有完全使用了messageText,才会收到通知。它并没有告诉你它被说出来了,但是被打断了,并且它也不会被触发通过UIKit框架发出的任何文字。UIAccessibility.h
标题中有大量有用的信息。如果您正在着手UIAccessibility支持,那么这是一个很好的阅读。