如何解决有没有办法在“UIApplication”或“UIWindow”级别检测 VoiceOver 焦点变化/用户交互?
我正在开发的应用的其中一项功能是“空闲超时”——基本上,如果用户没有与应用交互的时间超过五分钟,他们的会话会出于隐私/安全原因而结束。>
目前这是通过覆盖应用委托中的 sendEvent(_ event: UIEvent)
并重置计时器来实现的。
但是,我注意到当用户使用 VoiceOver 与应用交互时,根本不会调用 sendEvent(_ event: UIEvent)
。
当用户双击以激活控件时被调用,但它不是调用焦点更改,与 .adjustable
控件交互,等等。
这意味着,例如,如果用户在表格视图中的一长串行列表中滑动,则不会调用 sendEvent(_ event: UIEvent)
,并且用户可能会超时使用应用程序,即使他们已与其互动。
有没有办法检测 UIApplication
或 UIWindow
级别的 VoiceOver 焦点更改或交互,或者可以订阅以获得干净解决方案的通知?
我找到的最接近的解决方案建议在单个视图上使用 UIAccessibilityFocus
协议,但这感觉起来可能非常混乱并且涉及很多子类化 (https://stackoverflow.com/a/20712889)。
对于适用于 VoiceOver 和非 VoiceOver 用户的空闲超时的任何不同建议也将不胜感激 - 我很可能错过了一些东西。
解决方法
所以我在这里找到了解决方案,现在我开始自责了。
UIAccessibility.elementFocusedNotification
是键 (https://developer.apple.com/documentation/uikit/uiaccessibility/1620210-elementfocusednotification)。
因此,解决方案可能类似于:
NotificationCenter.default.addObserver(self,selector: #selector(self.accessibilityElementFocussed(notification:)),name: UIAccessibility.elementFocusedNotification,object: nil)
@objc private func accessibilityElementFocussed(notification: NSNotification) {
// Reset your idle timer here.
}
希望这对某人有所帮助 - 我在网上看到了很多不考虑 VoiceOver 用户的空闲计时器解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。