启用全键盘访问时,如何通过代码将焦点移至按钮?
编程方式移动全键盘访问焦点到按钮的解决方案
你的代码逻辑框架没问题,但点击按钮的瞬间,触发操作的按钮会先抢占焦点,导致后续设置的焦点被覆盖。通过以下调整可以解决问题,同时确保按钮支持全键盘访问的焦点显示:
修改后的代码:
struct ContentView: View { @FocusState private var focusedElement: FocusableElement? enum FocusableElement: Hashable { case button2 } var body: some View { VStack{ VStack { Button("Move focus to Button2") { // 延迟到当前事件循环结束后设置焦点,避免被当前按钮抢占 DispatchQueue.main.async { focusedElement = .button2 } } Button("Button2") {} .focused($focusedElement, equals: .button2) // 显式声明支持全键盘访问的焦点 .accessibilityFocusable(true) } } } }
关键调整说明:
DispatchQueue.main.async延迟设置焦点:避开当前点击按钮的焦点抢占逻辑,确保Button2能正常获取焦点。.accessibilityFocusable(true):明确标记按钮支持全键盘访问的焦点机制,保证焦点边框能正常显示。
另外需确认已在系统设置中启用全键盘访问(路径:系统设置 > 键盘 > 全键盘访问 > 勾选“所有控件”)。
内容的提问来源于stack exchange,提问作者sash
相关产品推荐
相关产品推荐

