首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能成功地将数据从一个视图传递到SwiftUI中的许多列表项的另一个视图?

为什么我不能成功地将数据从一个视图传递到SwiftUI中的许多列表项的另一个视图?
EN

Stack Overflow用户
提问于 2022-02-21 15:28:08
回答 2查看 31关注 0票数 0

我是SwiftUI的新手,我有一个小项目,它只是一个列表项的工作,但它不是用于列表项,比如当我单击任何列表项时,所有细节都传递"david“的名称,我想传递我单击的用户的数据,这里遗漏了什么?

代码语言:javascript
复制
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)
}}}
EN

回答 2

Stack Overflow用户

发布于 2022-02-21 15:54:50

在某个地方,您必须循环遍历您的项目数组。

比如像这样。

代码语言:javascript
复制
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)
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2022-02-21 16:13:36

在这里,您实现了您的模型,这在我看来不错。

代码语言:javascript
复制
struct Image: Identifiable, Hashable {
    var id = UUID().uuidString
    var name: String
}

如果您想像在问题中一样使用列表视图,则图像数据是指定的并且是静态的。因此,您可以直接在结构中初始化它们。目标是将给定的数据解析到我们的ListView和InformationView中。因此,我们创建了一个NavigationView来控制导航。在这个NavigationView中,我们定义了一个列表,它接受所有的项并循环遍历它(for-each)。

代码语言:javascript
复制
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)。

代码语言:javascript
复制
struct InformationView: View {
    
    let image: Image
    
    var body: some View {
        Text(image.name)
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71208902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档