在自定义视图上处理来自 VoiceOver 的“点击”
Posted
技术标签:
【中文标题】在自定义视图上处理来自 VoiceOver 的“点击”【英文标题】:Handle a "tap" from VoiceOver on a custom view 【发布时间】:2017-08-08 08:33:02 【问题描述】:我正在审查我们的应用以使其更易于访问,但我遇到了自定义视图的问题。注意:我使用的是 Xamarin/C#,但希望这不会改变任何东西,因为它在后台使用相同的 API。
这个自定义视图基本上模仿了“滑动解锁”手势。这当然不适用于 VoiceOver,因为启用后,用户无法“滑动”,只能双击激活视图/按钮。
视图是UIView
的子类,由子类UIVIew
s和一个从左到右捕捉手势的UIPanGestureRecognizer
组成。
我首先向父类添加可访问性信息:
IsAccessibilityElement = true;
AccessibilityTraits = UIAccessibilityTrait.Button;
AccessibilityLabel = "...";
VoiceOver 现在可以正确地将滑块视为一个视图,而不是检查子视图。但是,我无法使用“VoiceOver 双击”手势来激活它。
我尝试继承 UIControl
而不是 UIView
并覆盖 sendAction(),但没有调用此方法。
我不想将 UIAccessibilityTraitAllowsDirectInteraction
特征设置为控件,因为这不利于使应用程序可访问。
我该怎么做才能捕捉到“双击”并执行用户滑动控件时应该执行的操作?
【问题讨论】:
【参考方案1】:所以...毕竟这是一个 Xamarin 问题。
为确保 VoiceOver 与自定义控件一起使用,您必须遵守 UIAccessibilityAction 非正式协议。就我而言,它是accessibilityActivate()。
但由于我使用的是 Xamarin,我需要导出该方法,以确保运行时可以看到我从非正式协议中实现了一个方法。
[Export("accessibilityActivate")]
public bool AccessiblityActivate()
Console.WriteLine("It works!");
return true;
【讨论】:
以上是关于在自定义视图上处理来自 VoiceOver 的“点击”的主要内容,如果未能解决你的问题,请参考以下文章
在自定义视图中处理 UITapGestureRecognizer