Ios 使用ForEach在SwiftUI中的按钮按钮上制作独特的表单?
,许多人说这在最新的XCode版本中得到了修复,但它对我不起作用,我使用的是支持iOS 14.5的最新公共XCode版本。我有几个数组,每个数组都包含名称、编号和描述等信息。我希望每一个都显示为按钮,然后在点击时显示一张具有该按钮独特视图的图纸 以下是我的一个阵列的简化示例:Ios 使用ForEach在SwiftUI中的按钮按钮上制作独特的表单?,ios,arrays,swift,foreach,swiftui,Ios,Arrays,Swift,Foreach,Swiftui,,许多人说这在最新的XCode版本中得到了修复,但它对我不起作用,我使用的是支持iOS 14.5的最新公共XCode版本。我有几个数组,每个数组都包含名称、编号和描述等信息。我希望每一个都显示为按钮,然后在点击时显示一张具有该按钮独特视图的图纸 以下是我的一个阵列的简化示例: var discussionTask = [ Task(taskname: "Pick Up Around Your City", taskdescription: "Pick
var discussionTask = [
Task(taskname: "Pick Up Around Your City", taskdescription: "Pick up and recycle litter", sfsymbolname: "trash.slash.fill", tokencount: 15),
Task(taskname: "Go Paperless", taskdescription: "When possible, opt to use a digital device over paper.", sfsymbolname: "trash.slash.fill", tokencount: 15),
Task(taskname: "Plant a Tree", taskdescription: "Plant a tree.", sfsymbolname: "leaf.fill", tokencount: 15)
]
对于这个示例数组,我希望为每个任务
创建一个按钮,因此在本例中有3个按钮。第一个按钮应显示名称“在您的城市附近提货”,并带有数字“15”。单击时,我希望它显示所有数据,包括taskscription
和sfsymbol
我当前尝试的所有操作都只显示排序数组中的第一项,但我希望它为每个按钮显示一个唯一的工作表。我将继续添加更多的内容,而不仅仅是列表中的三项。以下是我目前正在尝试的:
func DiscussionTrackViewButton(tasknumber: Int) -> some View {
Button(action: {
print(tasknumber)
showTaskSheet = true
}, label: {
TrackBlockView(sfimagename: discussionTask.sorted { $0.taskname < $1.taskname }[tasknumber].sfsymbolname, taskname: discussionTask.sorted { $0.taskname < $1.taskname }[tasknumber].taskname, tokencount: String(discussionTask.sorted { $0.taskname < $1.taskname }[tasknumber].tokencount))
})
.sheet(isPresented: $showTaskSheet) {
DetailedTrackView(sfsymbolname: discussionTask.sorted { $0.taskname < $1.taskname }[tasknumber].sfsymbolname, taskname: discussionTask.sorted { $0.taskname < $1.taskname }[tasknumber].taskname, taskdetails: discussionTask.sorted { $0.taskname < $1.taskname }[tasknumber].taskdescription, tokencount: discussionTask.sorted { $0.taskname < $1.taskname }[tasknumber].tokencount, trackData: $trackdata, DailyGoalProgress: $DailyGoalProgress, TabSelection: $TabSelection, SavedDailyGoal: $SavedDailyGoal, DateSinceStreak: $DateSinceStreak, DaysOfStreak: $DaysOfStreak)
}
}
func discussiontrackview按钮(任务编号:Int)->一些视图{
按钮(操作:{
打印(任务编号)
showTaskSheet=true
},标签:{
TrackBlockView(sfimagename:discussionTask.sorted{$0.taskname<$1.taskname}[tasknumber]。sfsymbolname,taskname:discussionTask.sorted{$0.taskname<$1.taskname}[tasknumber]。taskname,tokencount:String(discussionTask.sorted{$0.taskname<$1.taskname}[tasknumber]。tokencount))
})
.工作表(显示:$showTaskSheet){
DetailedTrackView(sfsymbolname:discussionTask.sorted{$0.taskname<$1.taskname}[tasknumber]。sfsymbolname,taskname:discussionTask.sorted{$0.taskname<$1.taskname}[tasknumber]。taskname,taskdetails:discussionTask.sorted{$0.taskname<$1.taskname}[tasknumber]。taskdescription,tokencount:discussionTask.sorted{$0.taskname<$1.taskname}[taskname].tokencount,trackData:$trackData,DailyGoalProgress:$DailyGoalProgress,TabSelection:$TabSelection,SavedDailyGoal:$savedDateSincStreak:$DateSincStreak,DaysOfStreak:$DaysOfStreak)
}
}
下面是我调用函数的地方:
ForEach(0..<discussionTask.count) { index in
DiscussionTrackViewButton(tasknumber: index)
}
ForEach(0..您可以执行以下操作:
struct DiscussionTaskView: View {
var discussionTasks = [
Task(taskname: "Pick Up Around Your City", taskdescription: "Pick up and recycle litter", sfsymbolname: "trash.slash.fill", tokencount: 15),
Task(taskname: "Go Paperless", taskdescription: "When possible, opt to use a digital device over paper.", sfsymbolname: "trash.slash.fill", tokencount: 15),
Task(taskname: "Plant a Tree", taskdescription: "Plant a tree.", sfsymbolname: "leaf.fill", tokencount: 15)
]
@State var selectedTask: Task?
var body: some View {
VStack(spacing: 20) {
ForEach(discussionTasks) { task in
Button {
selectedTask = task
} label: {
Image(systemName: task.sfsymbolname)
}
.sheet(item: $selectedTask) { task in
VStack(alignment: .center, spacing: 20) {
Text(task.taskname)
.font(.headline)
Text(task.taskdescription)
Text("\(task.tokencount)")
Image(systemName: task.sfsymbolname)
}
}
}
}
}
}
这将使用工作表(项目:内容:)
版本的工作表
修改器在点击相应按钮时显示每个项目
它还假设您的任务
结构符合可识别的
,如果它还不符合,这并不难做到