SwiftUI:关闭当前工作表时,.sheet()不会转到带有预期数据的前一个视图

时间:2020-04-11 04:23:01

标签: swiftui

起码,我的代码如下。在SinglePersonView中,当用户在MovieListView(显示演员参加的电影的电影列表)中轻按电影的一个图像时,它会以工作表模式打开SingleMovieView

可以在点击时弹出工作表。但是我发现在关闭工作表并重新选择MovieListView中的其他电影之后,工作表始终以我上次单击的电影信息(也就是第一次选择的电影信息)打开。我可以在控制台中看到movie id始终与第一次相同。我现在不知道了,我是否需要在解雇上进行重装操作或其他?

这是在SwiftUI的subView中使用.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)
          }
        }
      }
    }
  }
}


1 个答案:

答案 0 :(得分:0)

视图堆栈中应该只有一个.sheet,但是在提供的快照中,有许多一次被全部激活-实际上,以下行为是无法预测的。

已更正变体

$AsWMI[$PriorityClass]