首页 > 解决方案 > ForEach 中的工作表不会遍历项目 SwiftUI

问题描述

我在 ForEach 中使用工作表时遇到问题。基本上我有一个列表,它显示了我的数组中的许多项目和一个触发工作表的图像。问题是,当我的工作表出现时,它只显示我的数组的第一项,在这种情况下是“哈利波特”。

这是代码

struct ContentView: View {
    @State private var showingSheet = false
    
    var movies = ["Harry potter", "Mad Max", "Oblivion", "Memento"]
    var body: some View {
        NavigationView {
            List {
                ForEach(0 ..< movies.count) { movie in
                    HStack {
                        Text(self.movies[movie])
                        Image(systemName: "heart")
                    }
                        .onTapGesture {
                            self.showingSheet = true
                    }
                    .sheet(isPresented: self.$showingSheet) {
                        Text(self.movies[movie])
                    }
                }
            }
        }
    }
}

标签: swiftforeachswiftui

解决方案


应该只有一个工作表,所以这是可能的方法 - 使用另一个工作表修饰符并通过选择激活它

使用 Xcode 12 / iOS 14 测试(兼容 iOS 13)

extension Int: Identifiable {
    public var id: Int { self }
}

struct ContentView: View {
    @State private var selectedMovie: Int? = nil

    var movies = ["Harry potter", "Mad Max", "Oblivion", "Memento"]
    var body: some View {
        NavigationView {
            List {
                ForEach(0 ..< movies.count) { movie in
                    HStack {
                        Text(self.movies[movie])
                        Image(systemName: "heart")
                    }
                        .onTapGesture {
                            self.selectedMovie = movie
                    }
                }
            }
            .sheet(item: self.$selectedMovie) {
                Text(self.movies[$0])
            }
        }
    }
}

推荐阅读