SwiftUI在组合列表中列出选中的项



我正在构建一个文件管理器应用程序。

在这个应用程序中,用户可以在列表中选择一个特定的文件夹。也可以选择"所有文件夹"选项。这是列表中的第一个元素。

我想将选中的文件夹保存在AppState类中,如果用户选择了"All Folders"

,将其设置为nil
class AppState: ObservableObject {
@Published var selectedFolder: Folder?
}
struct FileListView: View {
@EnvironmentObject
var appState: AppState

var body: some View {
List() {
FileRowView(
title: "All Files",
)
.onTapGesture {
appState.selectedFolder = nil
}

ForEach(filesList) {
file in
FileRowView(
title: file.title ?? "File unnamed",
)
.onTapGesture {
appState.selectedFolder = folder
}
}
}
}
}

即使这段代码可以工作并且selectedFolder已经更新,List也不会在View实际选中的元素中突出显示。它没有这种"蓝色"。外观和感觉通常应用于列表中的选定项。

  1. 您需要的列表版本,保持跟踪选择:List(selection: )
  2. 即使绑定选择变量是可选的,您也不能将nil用于List元素。nilto the List表示未选择任何内容。
  3. 使用List初始化器,您不需要onTapGesture,只需为每一行提供与您的选择变量相同类型的.tag()

下面是一个简化的例子:

struct FileListView: View {
@State var selectedFolder: Int?

var body: some View {
List(selection: $selectedFolder) {
Text("All Files")
.tag(999)

ForEach(0..<10) { file in
Text("file (file)")
.tag(file)
}
}
}
}

相关内容

  • 没有找到相关文章

最新更新