在模态中获取特定的 id
Get a specific id in a modal
我还在工作中学习,我的问题可能看起来很愚蠢。
我有一个电影列表,我想在点击时显示所选电影的卡片。
所以我有我的 ResultsView
var results:[DiscoverResult]
@State private var resultsCount:Int = 0
@State private var isPresented:Bool = false
@EnvironmentObject private var genres:Genres
var body: some View {
ScrollView {
ForEach (results){ result in
Button(action: {
isPresented.toggle()
}, label: {
ZStack {
ZStack {
KFImage(URL (string: baseUrlForThumb + result.posterPath)).resizable().scaledToFill()
.frame( height: 150)
.mask(Rectangle().frame( height: 150))
Rectangle().foregroundColor(.clear) // Making rectangle transparent
.background(LinearGradient(gradient: Gradient(colors: [.clear, .clear, .black]), startPoint: .top, endPoint: .bottom))
}.frame( height: 150)
// Titre du film
VStack(alignment: .center) {
Spacer()
Text(result.title)
.fontWeight(.bold)
.foregroundColor(.white)
.multilineTextAlignment(.center)
// Genres du film
Text(genres.generateGenresList(genreIDS: result.genreIDS)).font(.caption).foregroundColor(.white).multilineTextAlignment(.center)
} .padding()
}.padding(.horizontal)
})
.sheet(isPresented: $isPresented, content: {
MovieView(isPresented: $isPresented, movieId: result.id)
})
.navigationTitle(result.title)
}
}
}
}
还有我的 MovieView
import SwiftUI
struct MovieView: View {
@Binding var isPresented: Bool
var movieId:Int
var body: some View {
VStack {
Text(String(movieId))
.padding()
Button("Fermer") {
isPresented = false
}
}
}
}
但是电影卡仍然选择相同的偶数列表元素。
我认为 'result.id' 在每个循环中都会被覆盖,但我不知道如何修复它。
抱歉我的英语错误。
谢谢你的目的。
您可以使用 .sheet(item:, content:)
并传递整个 result
对象
,而不是对 .sheet
使用 isPresented
.sheet(item: $selecteditem( { result in
MovieView(item: result)
}
要完成这项工作,您需要一个新的 属性(您可以删除 isPresented)
@State private var selectedItem: DiscoverResult?
你需要更新你的 MovieView
结构
struct MovieView: View {
let result: DiscoverResult
var body: some View {
//...
}
}
如果您愿意,也可以只将电影 ID 传递给您的 MovieView。
我还在工作中学习,我的问题可能看起来很愚蠢。
我有一个电影列表,我想在点击时显示所选电影的卡片。
所以我有我的 ResultsView
var results:[DiscoverResult]
@State private var resultsCount:Int = 0
@State private var isPresented:Bool = false
@EnvironmentObject private var genres:Genres
var body: some View {
ScrollView {
ForEach (results){ result in
Button(action: {
isPresented.toggle()
}, label: {
ZStack {
ZStack {
KFImage(URL (string: baseUrlForThumb + result.posterPath)).resizable().scaledToFill()
.frame( height: 150)
.mask(Rectangle().frame( height: 150))
Rectangle().foregroundColor(.clear) // Making rectangle transparent
.background(LinearGradient(gradient: Gradient(colors: [.clear, .clear, .black]), startPoint: .top, endPoint: .bottom))
}.frame( height: 150)
// Titre du film
VStack(alignment: .center) {
Spacer()
Text(result.title)
.fontWeight(.bold)
.foregroundColor(.white)
.multilineTextAlignment(.center)
// Genres du film
Text(genres.generateGenresList(genreIDS: result.genreIDS)).font(.caption).foregroundColor(.white).multilineTextAlignment(.center)
} .padding()
}.padding(.horizontal)
})
.sheet(isPresented: $isPresented, content: {
MovieView(isPresented: $isPresented, movieId: result.id)
})
.navigationTitle(result.title)
}
}
}
}
还有我的 MovieView
import SwiftUI
struct MovieView: View {
@Binding var isPresented: Bool
var movieId:Int
var body: some View {
VStack {
Text(String(movieId))
.padding()
Button("Fermer") {
isPresented = false
}
}
}
}
但是电影卡仍然选择相同的偶数列表元素。
我认为 'result.id' 在每个循环中都会被覆盖,但我不知道如何修复它。
抱歉我的英语错误。
谢谢你的目的。
您可以使用 .sheet(item:, content:)
并传递整个 result
对象
.sheet
使用 isPresented
.sheet(item: $selecteditem( { result in
MovieView(item: result)
}
要完成这项工作,您需要一个新的 属性(您可以删除 isPresented)
@State private var selectedItem: DiscoverResult?
你需要更新你的 MovieView
结构
struct MovieView: View {
let result: DiscoverResult
var body: some View {
//...
}
}
如果您愿意,也可以只将电影 ID 传递给您的 MovieView。