You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用全键盘访问时,如何通过代码将焦点移至按钮?

编程方式移动全键盘访问焦点到按钮的解决方案

你的代码逻辑框架没问题,但点击按钮的瞬间,触发操作的按钮会先抢占焦点,导致后续设置的焦点被覆盖。通过以下调整可以解决问题,同时确保按钮支持全键盘访问的焦点显示:

修改后的代码:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 21:46:13