将 UIView.isAccessibleElement 设置为 true 会禁用在画外音模式下点击子视图
Setting UIView.isAccessibleElement to true disables clicking of subview in voiceovermode
所以我有一个自定义视图控制器,它显示一个带有几个按钮的对话框。
当视图出现时,我希望画外音读出一些描述对话框的基本信息。
为实现这一点,我将父视图设为可访问元素,而作为两个按钮的子视图也是可访问元素。
我现在的问题是按钮不能直接点击。
只有在屏幕上向右滑动才能到达它们。
class MyViewController: UIViewController {
let parent = UIView()
let button1 = UIButton()
let button2 = UIButton()
init() {
parent.addSubview(button1)
parent.addSubview(button2)
parent.isAccessibilityElement = true
button1.isAccessibilityElement = true
button2.isAccessibilityElement = true
parent.accessibilityLabel = "Message"
self.view.addSubview(parent)
self.view.accessibilityElements = [parent, button1, button2]
}
override func viewDidAppear(_ animated: Bool) {
}
}
如果有更好的方法让画外音在打开时描述视图,我也愿意。
此外,视图需要是模态的,以便焦点被困在视图上。
您可以post a notification将消息作为参数,这样您就不需要将父视图设置为无障碍元素。这将解决您的两个问题。
示例代码:
let parentVc = UIView()
let button1 = UIButton()
let button2 = UIButton()
init() {
parentVc.addSubview(button1)
parentVc.addSubview(button2)
button1.setTitle("btn1", for: .normal)
button2.setTitle("btn2", for: .normal)
button1.isAccessibilityElement = true
button2.isAccessibilityElement = true
self.view.addSubview(parentVc)
self.view.accessibilityElements = [button1, button2]
UIAccessibility.post(notification: UIAccessibility.Notification.screenChanged, argument: "Message here");
}
To achieve this I made the parent view to be an accessible element and the subviews which are two buttons are also accessible elements.
这绝对是问题所在:您无法同时访问 parent 视图及其 children ⟹ 请参阅示例 sheet this explanation.
如果 parent 视图可访问,其 children 将不会被 VoiceOver 看到,反之亦然。
If there is a better way to get voiceover to give description of the view when the opens, I am open to that too.
使用 VoiceOver,您必须尽可能准确和简短。
当您浏览屏幕时,视图的描述由它的元素或它的标题本身提供:在我看来,您不应该读出 完美标题 应该提供的描述除了正确实施页面的不同组件。
有一个 great presentation 由盲人制作,他解释了如何在应用程序中编写标签以便更好地理解。
Also, the view needs to be a modal so that focus is trapped on the view.
达到此目的的最佳方法是 使用在 WWDC session 期间引入的 accessibilityViewIsModal
property of your view ⟹ take a look at this example 如果需要的话。
所以我有一个自定义视图控制器,它显示一个带有几个按钮的对话框。 当视图出现时,我希望画外音读出一些描述对话框的基本信息。 为实现这一点,我将父视图设为可访问元素,而作为两个按钮的子视图也是可访问元素。 我现在的问题是按钮不能直接点击。 只有在屏幕上向右滑动才能到达它们。
class MyViewController: UIViewController {
let parent = UIView()
let button1 = UIButton()
let button2 = UIButton()
init() {
parent.addSubview(button1)
parent.addSubview(button2)
parent.isAccessibilityElement = true
button1.isAccessibilityElement = true
button2.isAccessibilityElement = true
parent.accessibilityLabel = "Message"
self.view.addSubview(parent)
self.view.accessibilityElements = [parent, button1, button2]
}
override func viewDidAppear(_ animated: Bool) {
}
}
如果有更好的方法让画外音在打开时描述视图,我也愿意。
此外,视图需要是模态的,以便焦点被困在视图上。
您可以post a notification将消息作为参数,这样您就不需要将父视图设置为无障碍元素。这将解决您的两个问题。
示例代码:
let parentVc = UIView()
let button1 = UIButton()
let button2 = UIButton()
init() {
parentVc.addSubview(button1)
parentVc.addSubview(button2)
button1.setTitle("btn1", for: .normal)
button2.setTitle("btn2", for: .normal)
button1.isAccessibilityElement = true
button2.isAccessibilityElement = true
self.view.addSubview(parentVc)
self.view.accessibilityElements = [button1, button2]
UIAccessibility.post(notification: UIAccessibility.Notification.screenChanged, argument: "Message here");
}
To achieve this I made the parent view to be an accessible element and the subviews which are two buttons are also accessible elements.
这绝对是问题所在:您无法同时访问 parent 视图及其 children ⟹ 请参阅示例 sheet this explanation.
如果 parent 视图可访问,其 children 将不会被 VoiceOver 看到,反之亦然。
If there is a better way to get voiceover to give description of the view when the opens, I am open to that too.
使用 VoiceOver,您必须尽可能准确和简短。
当您浏览屏幕时,视图的描述由它的元素或它的标题本身提供:在我看来,您不应该读出 完美标题 应该提供的描述除了正确实施页面的不同组件。
有一个 great presentation 由盲人制作,他解释了如何在应用程序中编写标签以便更好地理解。
Also, the view needs to be a modal so that focus is trapped on the view.
达到此目的的最佳方法是 使用在 WWDC session 期间引入的 accessibilityViewIsModal
property of your view ⟹ take a look at this example 如果需要的话。