如何在SwiftUI中设置按钮焦点?

时间:2020-02-07 14:36:07

标签: swiftui tvos

!!! julia> a = fill(float(pi), 2) 2-element Array{Float64,1}: 3.141592653589793 3.141592653589793 !!!

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

我知道SwiftUI中有preferredFocusedView,但我喜欢在UIKit中这样做。

感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

SwiftUI 2.0

注意:!部分解决方案!!!

以下方法(在Xcode 12b5 / tvOS 14上进行测试)仅在堆栈上有效,并且不适用于List / ScrollView(在任何经过​​测试的组合中)。

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

enter image description here

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)
            }
        }
    }
}