如何在Mac上的SwiftUI中使用筛选器字段制作列表



我正在尝试构建一个对话框,用户可以从(当前(四个列表中的一个或多个列表中进行选择。由于每个列表的结构相似,我正在构建一个视图,供每个列表使用。列表可能有数千个条目,所以我想允许用户通过在搜索字段中键入(在SwiftUI中,它只是一个TextField(并只显示匹配的条目来过滤列表。这一切都适用于下面的代码,但我无法选择列表中的一行。

struct RegistryEntry: Equatable, Identifiable, Hashable {
var id = UUID()
var code = ""
var name = ""
var other = ""
}
struct RegistryPicker: View {
@State var sourceList: [RegistryEntry]
@State var searchString = ""
@State var selectedCode: String
@State private var selectedItem: RegistryEntry?

var body: some View {
HStack() {
VStack() {
TextField("Filter", text: $searchString)
Spacer()
}

List(searchString == "" ? sourceList :
sourceList.filter { $0.name.localizedCaseInsensitiveContains(searchString) },
selection: $selectedItem) { entry in
Text(entry.name)
}
}
}

我仍在思考SwiftUI的范式转变,所以我很可能错过了一些显而易见的东西。

再往下看,我需要将所选项目传递到对话框,最好将初始选择发送到列表。我假设这是通过将所选内容绑定到封闭视图中的适当状态变量并设置所选内容来完成的,大概是在.onPeare子句中。任何建议都将受到欢迎!

事实证明,添加"id:.self";列表中缺少的内容。文档暗示,如果内容符合Identifiable,则不需要它,但除非显式添加标识符密钥路径,否则选择不起作用。

最新更新