关注SwiftUI(tvOS)列表中的特定项目

关注SwiftUI(tvOS)列表中的特定项目,swiftui,tvos,Swiftui,Tvos,在Swiftui2.0和TVOS14中,我很难找到如何专注于列表中特定单元格/行的方法。当导航到视图时,我需要能够聚焦并选择特定记录。然而,当焦点切换到列表时,一些随机行被聚焦。我尝试了ScrollView和List创建一个项目列表,其中按钮作为项目,并具有适当的prefersDefaultFocus。什么都不管用。下面是一些示例代码: struct ChannelListView: View { @Namespace private var namespace @Observe

在Swiftui2.0和TVOS14中,我很难找到如何专注于列表中特定单元格/行的方法。当导航到视图时,我需要能够聚焦并选择特定记录。然而,当焦点切换到列表时,一些随机行被聚焦。我尝试了ScrollView和List创建一个项目列表,其中按钮作为项目,并具有适当的prefersDefaultFocus。什么都不管用。下面是一些示例代码:

struct ChannelListView: View {
    @Namespace private var namespace
    @ObservedObject var viewModel : LiveViewModel
    @State var selection = Set<ChannelItem>()
    var body: some View {
        List(viewModel.channels, selection: $selection){ item in
            ScrollViewReader { proxy in
                        Button(action: {
                        }){
                            ChannelItemView(item: item, selectedItem: $viewModel.selectedChannel, onSelected: { id in
                            })
                            .padding(.vertical, 2)
                        }
                        .buttonStyle(ChannelButtonStyle())
                        .prefersDefaultFocus(item == viewModel.selectedChannel, in: namespace)
            }
        }
        .focusScope(namespace)
    }
}
struct ChannelListView:视图{
@命名空间私有变量命名空间
@观察对象变量视图模型:LiveViewModel
@State var selection=Set()
var body:一些观点{
列表(viewModel.channels,selection:$selection){item in
ScrollViewReader{中的代理
按钮(操作:{
}){
ChannelItemView(项:项,selectedItem:$viewModel.selectedChannel,onSelected:{id in
})
.padding(.vertical,2)
}
.buttonStyle(ChannelButtonStyle())
.prefersDefaultFocus(项==viewModel.selectedChannel,在:命名空间中)
}
}
.focusScope(名称空间)
}
}

注意这一点是的。。。我有一个大的可滚动列表。此解决方案似乎不适用于列表/滚动视图