概述:
我很难理解如何在与 IOS 13+ 兼容的SwiftUI 视图中以编程方式正确转移辅助功能焦点。
不幸的是,这意味着无法使用 IOS 15+ 中提供的较新的 SwiftUI 焦点管理 API。
我看到的大多数建议与以下帖子类似:
它建议使用UIAccessibility.post(notification: .screenChanged/layoutChanged) argument: View)来更改焦点
然而,我的尝试没有成功。
我已经能够以与下面的代码相同的方式成功使用UIAccessibility.post(notification: .announcement) argument: String),并且它确实按预期宣布了刺痛。它花费的时间比 asyncAfter 计时器要长得多(可能需要 8 秒),但它似乎表明 post() 调用正在工作。
代码示例:
自定义展开/折叠,带有 V 形向上或向下,具体取决于它是展开还是折叠。
我希望能够以编程方式控制焦点扩展时的位置。例如,我可能希望能够让 VoiceOver 聚焦在打开的扩展菜单中的“菜单项 3”上。
我认为接近下面代码的东西可能会起作用,但我对帖子中的参数视图如何工作缺乏了解,并且不确定是否有办法使用 SwiftUI 视图,或者我是否需要创建一个UIKit 视图并使用 UIViewRepresentable 或使用 UIHostingController 包装它?
目前的行为
展开菜单时,VoiceOver 会移至第一项。当菜单折叠时,VoiceOver 焦点将转移到最后一个文本视图。
期望的行为
我希望能够在展开菜单时明确决定 VoiceOver 焦点的位置,并能够在视图出现时将更多焦点集中到特定视图
我还考虑了使用 SwiftUI/IOS 13+ 中提供的工具的其他方法。例如,我使用accessibility(sortPriority:)和accessibilityElement(children: .combine/.contain/.ignore)来达到预期的结果,但这些努力也被证明是不成功的。
代码搜索:
以下 GitHub 搜索目前分别产生 10 和 13 个结果:
在这些结果中,SwiftUI 视图中使用的结果使用了“nil”参数(据说将焦点转移到屏幕上的第一项)
这让我怀疑我是否真的偏离了轨道。 …
如果这个问题已经得到回答,我深表歉意,但我已经搜索过,但找不到答案。我正在尝试编写一个正则表达式,它将匹配所有前导和尾随空格、左括号和右括号与单词之间的空格,但不会匹配单词之间的空格。以下是我正在解析的数据的字符串格式示例:
[Header]
[ SomeSpace]
[ Some1 More Space 15 ]
Run Code Online (Sandbox Code Playgroud)
没有前后空格,括号之间没有空格,只有一个词。
一些前导和尾随空格,左括号和尾随空格之间的空间。
一些前导空格、单词和数字之间的空格、左括号和右括号之间的空格以及尾随空格。
我想出的最接近的单个正则表达式是:
/[^\[\]a-zA-Z\d]/
Run Code Online (Sandbox Code Playgroud)
但是我似乎无法仅匹配单词和数字之间的空格...
我目前用作解决方法的 ruby 代码是:
line.gsub!(/^\s*/, "")
line.gsub!(/\[/, "")
line.gsub!(/\]/, "")
s = line.gsub!(/^\s*|\s*$/, "")
s = "[" + s + "]\n"
Run Code Online (Sandbox Code Playgroud)
显然,不是很漂亮......
非常感谢将其简化为优雅的 gsub 线的任何帮助。
谢谢!
李