我是SwiftUI的新手,我有一个小项目,它只是一个列表项的工作,但它不是用于列表项,比如当我单击任何列表项时,所有细节都传递"david“的名称,我想传递我单击的用户的数据,这里遗漏了什么?
struct ImageModel: Identifiable, Hashable {
var id = UUID().uuidString
var name: String
}
var datas = [
ImageModel(name: "davis"),
ImageModel(name: "carry"),
ImageModel(name: "maria"),
]
struct ImageRowView: View {
var data: ImageModel
var body: some View {
NavigationLink(destination: ImageDetailsView(data: ImageModel)){
HStack{}
}}}
struct ImageDetailsView: View {
var body: some View {
ImageDetails(data: ImageModel(name: "davis"))
}
}
struct ImageDetailsView_Previews: PreviewProvider {
static var previews: some View {
ImageDetailsView()
}
}
struct ImageDetails : View {
var data: ImageModel
var body: some View{
VStack{
Text(data.name)
}
}
struct ImageHomeView: View {
var body: some View {
VStack(alignment: .leading, spacing: 15, content: {
ForEach(datas) {data in
ImageRowView(data: data)
}}}发布于 2022-02-21 15:54:50
在某个地方,您必须循环遍历您的项目数组。
比如像这样。
struct ImageModel: Identifiable, Hashable {
var id = UUID().uuidString
var name: String
}
struct ImageRowView: View {
var datas = [
ImageModel(name: "davis"),
ImageModel(name: "carry"),
ImageModel(name: "maria")
]
var body: some View {
NavigationView { // you need a NavigationView otherwise NavigationLink won't work
List { // you might want a List (as you mentioned it)
ForEach(datas) { item in // you need ForEach to loop through all items
NavigationLink(destination: ImageDetails(data: item)) {
Text(item.name) // here you show your list item
}
}
}
}
}
}
struct ImageDetails : View {
var data: ImageModel
var body: some View{
VStack {
Text("Detail View")
Text(data.name)
}
}
}发布于 2022-02-21 16:13:36
在这里,您实现了您的模型,这在我看来不错。
struct Image: Identifiable, Hashable {
var id = UUID().uuidString
var name: String
}如果您想像在问题中一样使用列表视图,则图像数据是指定的并且是静态的。因此,您可以直接在结构中初始化它们。目标是将给定的数据解析到我们的ListView和InformationView中。因此,我们创建了一个NavigationView来控制导航。在这个NavigationView中,我们定义了一个列表,它接受所有的项并循环遍历它(for-each)。
struct ImageListView: View {
let images: [Image] = [
Image(name: "davis"),
Image(name: "carry"),
Image(name: "maria"),
]
var body: some View {
NavigationView {
List(images) { image in
NavigationLink(destination: {
InformationView(image: image)
.navigationTitle(image.name)
}, label: {
Text(image.name)
})
}
.navigationBarTitle("Images")
}
}
}
struct ImageListView_Previews: PreviewProvider {
static var previews: some View {
ImageListView()
}
}现在,您可以使用此视图来控制如果单击其中一个项所显示的内容。您可以向Image模型添加属性,并且可以在视图中自动访问该属性,因为我们使用的是存储图像的属性(例如描述或kicker)。
struct InformationView: View {
let image: Image
var body: some View {
Text(image.name)
}
}https://stackoverflow.com/questions/71208902
复制相似问题