首页 > 解决方案 > 如何在 SwiftUI 中设置按钮焦点?

问题描述

!!!TVOS!!!

我有按钮列表,它以某种方式自动聚焦该列表中的第一个按钮(加载视图时)。有什么方法可以使用 聚焦该列表中的另一个按钮SwiftUI吗?

我知道有preferredFocusedViewUIKit但我喜欢在SwiftUI.

感谢您的任何建议!

标签: swiftuitvos

解决方案


SwiftUI 2.0

笔记: !!部分解决方案!!

以下方法经 Xcode 12b5 / tvOS 14 测试仅适用于堆栈,不适用于 List/ScrollView(在任何测试组合中)。

无论如何,它适用于屏幕上的小按钮集,因此值得发布。

在此处输入图像描述

struct DemoPreferredFocusView: View {
    @Namespace var ns
    @Environment(\.resetFocus) var resetFocus
    @AppStorage("initialButton") var initialButton: Int = 3

    var body: some View {
        VStack {
            ForEach(0..<10, id: \.self) { i in
                Button(action: {
                    print(">> tapped \(i)")
                    self.initialButton = i
                }) {
                    Text("Button \(i)")
                }
                .prefersDefaultFocus(i == initialButton, in: ns)
            }.focusScope(ns)
        }
        .onAppear {
            DispatchQueue.main.async {
                self.resetFocus.callAsFunction(in: ns)
            }
        }
    }
}

推荐阅读