xme*_*tal 12 foreach swift 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])
                    }
                }
            }
        }
    }
}
Asp*_*eri 17
应该只有一个工作表,所以这是可能的方法 - 使用另一个工作表修改器并通过选择激活它
使用 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])
            }
        }
    }
}
我将您的代码更改为只有一张纸,并将选定的电影放在一个变量中。
extension String: Identifiable {
    public var id: String { self }
}
struct ContentView: View {
    @State private var selectedMovie: String? = nil
    
    var movies = ["Harry potter", "Mad Max", "Oblivion", "Memento"]
    var body: some View {
        NavigationView {
            List {
                ForEach(movies) { movie in
                    HStack {
                        Text(movie)
                        Image(systemName: "heart")
                    }
                    .onTapGesture {
                        self.selectedMovie = movie
                    }
                }
            }
            .sheet(item: self.$selectedMovie, content: { selectedMovie in
                Text(selectedMovie)
            })
        }
    }
}
| 归档时间: | 
 | 
| 查看次数: | 1500 次 | 
| 最近记录: |