在 SwiftUI 中发布辅助功能通知

问题描述 投票:0回答:2

我需要将辅助功能焦点移至屏幕上的某个元素。在 UIKit 中,我可以简单地调用

UIAccessibility.post(.screenChanged, element)

当我使用 SwiftUI 视图执行此操作时,应用程序崩溃并在控制台中显示以下消息:

This class '__SwiftValue' is not a known serializable element and returning it as an accessibility element may lead to crashes

知道如何在 SwiftUI 中将焦点移动到屏幕上的某些元素吗?

swiftui uiaccessibility uiaccessibility-notification
2个回答
1
投票

解决方法是:当 UIView 出现时发布通知:

    .onAppear(perform: {
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
            UIAccessibility.post(notification: .screenChanged, argument: "New Screen")
        }
    })

作为参数,放入所需视图的可访问性标签的文本是有意义的。如果用户能够识别屏幕阅读器焦点的白色周围,则受损用户将不知道屏幕阅读器的焦点在哪里。

为了使事情顺利,在使用不同语言进行测试时应调整

0.1
的延迟。


0
投票

尝试 accessibilityFocused(_:equals:)

enum FocusedView: Hashable {
     case A
}

SomeView {
    @AccessibilityFocusState var focus: FocusedView?

    var body: some View {
        SomeButton()
           .accessibilityFocused($focus, equals: .A)
    }
}

如果您想将焦点设置到 SomeButton,

focus = .A
© www.soinside.com 2019 - 2024. All rights reserved.