如何在SwiftUI中传递多个数据表?

时间:2020-09-26 16:49:16

标签: swiftui

此代码对我来说效果很好。但是我需要在此页面中再添加2个.sheet。当我尝试其他解决方案时,列表单元格无法正确传递给数据。如何针对3张纸改进此代码?

@State var selectedUser: User?

     List...
        UserCell(user: user)
            .onTapGesture {
                 self.selectedUser = user
                        }

.sheet(item: self.$selectedUser) { user in
    DetailView(user: user)
}

1 个答案:

答案 0 :(得分:0)

NavigationViewsheet只有一个view,因此工作表中的数据代替了列表中的多工作表; 像下面的代码一样,在您的sheet的点击数据中添加一个view

 enum SheetType {
    case preview
    case edit
    case yourAnyChoice
 }

struct ContentView:View{
  @State var selectedUser:String = "" 
  @State var showingDetail = false
  @State var sheetType:SheetType = SheetType.preview
  var body: some View {
  List(userList){in user
      HStack{
            Button(action: {
                self.selectedUser = user.name
                self.sheetType = .preview
                self.showingDetail.toggle()
            }){
             Text("name")
            }
            Button(action: {
                self.selectedUser = user.name
                self.sheetType = .edit
                self.showingDetail.toggle()
            }){
             Text("edit")
            }
            Button(action: {
                self.selectedUser = user.name
                self.sheetType = .yourAnyChoice
                self.showingDetail.toggle()
            }){
             Text("yourAction")
            }
        }
   }
   .sheet(isPresented: self.$showingDetail){
   detailView(text:self.$selectedUser,type:self.$sheetType)
   }
  }

struct detailView:View {
  @Binding var text:String
  @Binding var type:SheetType
  var body:some View{
    if type == SheetType.preview{
      Text(text)
    }
    if type == .edit {
       yourEditingView() // as per your requirements 
     }
    if type == SheetType.yourAnyChoice{
      yourChoiceViews()
        }
    
}