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])
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
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])
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我将您的代码更改为只有一张纸,并将选定的电影放在一个变量中。
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)
})
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1500 次 |
| 最近记录: |