ame*_*ane 7 accessibility ios voiceover swift swiftui
我的屏幕上有一个按钮。当用户点击该按钮时,我的应用程序会打开一个模式(视图)。当用户关闭该视图时,辅助功能 VoiceOver 的焦点将转到屏幕顶部。在 UIKit 中,我可以使用UIAccessibility.post(notification:argument:)将.layoutChanged传递到notification参数中,并将对我的视图之一的引用传递到argument参数中。我怎样才能在 SwiftUI 中实现同样的行为?
小智 1
我的管理方法是.accessibilityHidden在父视图的最顶层使用包装器,然后使用 @State 变量作为传递给accessibilityHidden. 这样,在显示模式时,父视图将被忽略。然后在模态再次关闭后重新引入视图。
struct MainView: View {
@State var showingModal = false
var body: some View {
VStack {
Button(action: {
showingModal = true
}, label: {
Text("Open Modal")
})
.fullScreenCover(isPresented: $showingModal, onDismiss: {
print("Focus coming back to main view")
} content: {
Modal()
})
}
.accessibilityHidden(self.showingModal)
}
}
struct Modal: View {
@Environment(\.presentationMode) var presentationMode
var body: some View {
VStack {
Text("Focus will move here")
Button(action: {
presentationMode.wrappedValue.dismiss()
}) {
Text("Close Modal to Refocus Back")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以链接多个模式/警报,只要您有 @State 值来处理对它们的更改,以便焦点正确移动
.accessibilityHidden(self.showingModel1 || self.showingModel2 || self.showingAlert1 || self.showingAlert2)
Run Code Online (Sandbox Code Playgroud)
我知道这个问题确实很老了,但我实际上只是在处理这个问题,并且认为如果其他人偶然发现这个问题,这里就会有答案。
| 归档时间: |
|
| 查看次数: |
1363 次 |
| 最近记录: |