SwiftUI:.sheet()不';关闭当前工作表时,不要转到具有预期数据的上一个视图
作为最低要求,我的代码如下所示。在SwiftUI:.sheet()不';关闭当前工作表时,不要转到具有预期数据的上一个视图,swiftui,Swiftui,作为最低要求,我的代码如下所示。在SinglePersonView中,当用户在MovieListView(一个显示演员观看的电影的电影列表)中点击一个电影图像时,它会以工作表模式打开SingleMovieView 这张纸可以作为敲击弹弹出来。但我发现,在关闭工作表并在MovieListView中重新选择其他电影后,该工作表始终作为我上次单击的电影信息(即第一次选择的电影信息)打开。我可以在控制台中看到,电影id始终与第一次相同。我现在没有任何线索,我是否需要对解雇或其他事情进行重新加载操作 在S
SinglePersonView
中,当用户在MovieListView(一个显示演员观看的电影的电影列表)中点击一个电影图像时,它会以工作表模式打开SingleMovieView
这张纸可以作为敲击弹弹出来。但我发现,在关闭工作表并在MovieListView
中重新选择其他电影后,该工作表始终作为我上次单击的电影信息(即第一次选择的电影信息)打开。我可以在控制台中看到,电影id
始终与第一次相同。我现在没有任何线索,我是否需要对解雇或其他事情进行重新加载操作
在SwiftUI的子视图中使用.sheet()
是正确的方法,还是应该始终将其保留在主体中,在这种情况下,SinglePersonView
struct SinglePersonView: View {
var personId = -1
@ObservedObject var model = MovieListViewModel()
var body: some View {
ScrollView() {
VStack() {
...
MovieListView(movies: model.movies)
...
}
}.onAppear {
// json API request
}
}
}
struct MovieListView: View {
var movies: [PersonMovieViewModel]
@State private var showSheet = false
ScrollView() {
HStack() {
ForEach(movies) { movie in
VStack() {
Image(...)
.onTapGesture {
self.showSheet.toggle()
}
.sheet(isPresented: self.$showSheet) {
SingleMovieView(movieId: movie.id)
}
}
}
}
}
}
视图堆栈中应该只有一个.sheet,但在提供的快照中,有许多同时被激活-实际上,以下行为是不可预测的 这是修正的变体
struct MovieListView: View {
var movies: [PersonMovieViewModel]
@State private var showSheet = false
@State private var selectedID = "" // type of your movie's ID
var body: some View {
ScrollView() {
HStack() {
ForEach(movies) { movie in
VStack() {
Image(...)
.onTapGesture {
self.selectedID = movie.id
self.showSheet.toggle()
}
}
}
}
.sheet(isPresented: $showSheet) {
SingleMovieView(movieId: selectedID)
}
}
}
}
视图堆栈中应该只有一个.sheet,但在提供的快照中,有许多同时被激活-实际上,以下行为是不可预测的 这是修正的变体
struct MovieListView: View {
var movies: [PersonMovieViewModel]
@State private var showSheet = false
@State private var selectedID = "" // type of your movie's ID
var body: some View {
ScrollView() {
HStack() {
ForEach(movies) { movie in
VStack() {
Image(...)
.onTapGesture {
self.selectedID = movie.id
self.showSheet.toggle()
}
}
}
}
.sheet(isPresented: $showSheet) {
SingleMovieView(movieId: selectedID)
}
}
}
}
哦我应该将
.sheet
放在ForEach
循环之外,并将循环中的id分配给State
属性。这解决了我的代码问题,谢谢!我发现我可以将.sheet
放在scrollView之后并获得相同的效果,那么将.sheet
放在Stack View或Scroll View之后有什么不同吗?当然,我还更改了问题标题以与问题对齐。哦!我应该将.sheet
放在ForEach
循环之外,并将循环中的id分配给State
属性。这解决了我的代码问题,谢谢!我发现我可以将.sheet
放在scrollView之后并获得相同的效果,那么将.sheet
放在Stack View或Scroll View之后有什么不同吗?当然,我还更改了问题标题以与问题对齐。