Reputation: 119
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
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