tvOS/iOS平台是否有API可查询VoiceOver转子导航模式?
查询VoiceOver当前选中的转子导航模式的API方案
当然有对应的API可以查询!在iOS 13+和tvOS 13+版本中,苹果提供了直接获取当前选中VoiceOver转子的方法,下面是具体的实现思路和代码示例:
先确认VoiceOver运行状态
在查询转子之前,最好先判断VoiceOver是否处于启用状态,避免无意义的操作:if UIAccessibility.isVoiceOverRunning { // 执行转子查询逻辑 }获取当前选中的转子
通过UIAccessibility.shared.selectedRotor可以拿到当前选中的转子实例,再通过systemIdentifier属性判断具体的转子类型(这个属性是系统预定义的标识符,不受语言本地化影响,比判断名称更可靠):if #available(iOS 13.0, tvOS 13.0, *) { guard let selectedRotor = UIAccessibility.shared.selectedRotor else { // 未选中任何转子 return } switch selectedRotor.systemIdentifier { case .containers: print("当前选中的是「容器」转子") case .headings: print("当前选中的是「标题」转子") case .landmarks: print("当前选中的是「地标」转子") case .links: print("当前选中的是「链接」转子") case .lists: print("当前选中的是「列表」转子") // 还有更多系统转子类型,比如.tables, .images等 default: // 自定义转子或其他未匹配的类型 if let customName = selectedRotor.name { print("当前选中的自定义转子:\(customName)") } } } else { // 适配iOS/tvOS 13以下版本:没有直接获取选中转子的API,只能通过监听转子切换通知 NotificationCenter.default.addObserver( self, selector: #selector(handleRotorChange), name: UIAccessibilityRotorDidChangeNotification, object: nil ) }旧版本适配说明
对于iOS 13或tvOS 13之前的版本,苹果没有提供直接获取当前选中转子的API。你只能通过监听UIAccessibilityRotorDidChangeNotification通知来感知转子发生了切换,但无法直接拿到具体的转子类型,这种情况下只能通过用户操作或其他间接方式推断。
内容的提问来源于stack exchange,提问作者John Bear
相关产品推荐
相关产品推荐

