此代码对我来说效果很好。但是我需要在此页面中再添加2个.sheet。当我尝试其他解决方案时,列表单元格无法正确传递给数据。如何针对3张纸改进此代码?
@State var selectedUser: User?
List...
UserCell(user: user)
.onTapGesture {
self.selectedUser = user
}
.sheet(item: self.$selectedUser) { user in
DetailView(user: user)
}
答案 0 :(得分:0)
NavigationView
每sheet
只有一个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()
}
}