Robert
Robert

Reputation: 119

How to pass Data multiple Sheet in SwiftUI?

This code works very well for me. But I need to add 2 more .sheet in this page. When I try to other solutions list cell doesnt pass to data correctly. How do I improve this code for 3 sheet?

@State var selectedUser: User?

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

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

Upvotes: 3

Views: 2256

Answers (1)

Mir
Mir

Reputation: 469

NavigationView has only one sheet per view, so data in sheet instead multiple sheets as in your list; add one sheet to your view change data on tap, like in below code;

 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()
        }
    
}

Upvotes: 2

Related Questions