通过外部点击和VoiceOver模式关闭iOS表单弹出框

3
在iPad上,您可以使用controller.modalPresentationStyle = UIModalPresentationFormSheet来显示居中的模态窗口。一种常见的技术是允许用户通过单击“外部”或“后面”的方式关闭模态窗口。这在其他许多答案中都有涉及(Iphone SDK dismissing Modal ViewControllers on ipad by clicking outside of it, Dismiss modal view form sheet controller on outside tap),通常是通过将点击手势添加到视图的UIWindow上实现的。
我的问题是,在VoiceOver模式下如何使其对用户可访问?原生操作表允许在表格外部单击以关闭,甚至提示用户,说“双击以关闭弹出窗口”。如何以同样的方式公开UIWindow的点击手势?

一种选择是通过 accessibilityPerformEscape 实现“全局逃逸手势”(如 http://ronnqvi.st/adding-accessible-behavior 中所述)。然而,如果用户不知道手势,这并不容易被发现。 - tmm1
FYI - 在使用“弹出式”模态呈现样式的控制器中,通过在它们外部轻触即可关闭操作表或其他弹出窗口的默认功能已经内置。 - rmaddy
@rmaddy是正确的 - 系统会自动提供该功能,而表单样式不支持点击外部以解除(无论是对于VO用户还是非VO用户)。 - Jordan H
2个回答

4

这在我看来是解决方案,但不能向不知道它的应用程序VoiceOver用户解释,然后无法弄清如何离开这种模态视图,很遗憾,其中许多人不知道这个特定的手势。 - XLE_22
可以假设用户已经习惯了通过手势来阅读屏幕上的所有内容吗?例如:“用两个手指向上滑动以阅读屏幕上的所有内容。”如果用户已经习惯这样做,一种选择是使用提示。例如,在屏幕的第一个元素上设置一个提示:“要返回,请用两个手指执行Z手势”。类似这样的消息。 https://developer.apple.com/documentation/uikit/uiaccessibilityelement/1619585-accessibilityhint - Victor Sanchez
我不确定他们都知道双指手势,但这并不会阻碍:您可以通过其他方式迭代项目,但对于使用Z手势离开模态视图,情况并非如此。此外,请注意提示可能会因设备设置而被忽略:我建议不要指望提示提供重要信息。 - XLE_22

3
基本上没有办法使用FormSheet演示来做到这一点。您可以使用Popover演示,但在某些情况下其行为不同。
我的解决方案是检查UIAccessibilityIsVoiceOverRunning()并在FormSheet的顶部添加一个额外的关闭按钮元素,可通过语音over点击。我还实现了全局逃逸手势accessibilityPerformEscape

你也可以在语音提示时仅向弹出窗口添加一个轻拍手势,用它来关闭窗口,而不是再添加一个按钮。你的解决方案启发了我,谢谢 :) - BHendricks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接