swiftui - 导航前单击 listRow 更新环境对象
问题描述
在这里,我创建了一个可观察对象,我将其添加到环境对象中。在列表行上单击我需要在 DetailView 上导航之前更新我的环境对象的一些值。只是我想根据行选择显示对象的详细信息。
这是我尝试过的代码:
class MyModel:ObservableObject
{
var selectDate: String
var duration: String
var selectProject: String
init(dateStr: String, durationStr: String, projectName: String) {
self.selectDate = dateStr
self.duration = durationStr
self.selectProject = projectName
}
}
struct ContentView: View {
@EnvironmentObject var model: MyModel
@Environment (\.colorScheme) var colorScheme:ColorScheme
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
@ObservedObject var viewModel = TimesheetViewModel()
var body: some View {
List {
ForEach(self.viewModel.tasksArr, id:\.id) { taskObj in
NavigationLink(destination: DetailView()) { >need to update **model** before navigating Detail View
TimeSheetRowView(taskObj:rowElement)
}
}
}
有没有其他方法可以执行相同的任务?帮我解决这个问题
解决方案
您可以使用 aButton
和一个空的NavigationLink
。当您的按钮被点击时,您以编程方式选择一个NavigationLink
,但在您可以执行一些操作之前:
@State private var selectedItem: String?
var body: some View {
NavigationView {
List {
ForEach(self.viewModel.tasksArr, id:\.id) { taskObj in
HStack {
Button(action: {
// here you can update your model etc.
self.selectedItem = item
}, label: {
TimeSheetRowView(taskObj:rowElement)
})
NavigationLink(destination: DetailView(), tag: item, selection: self.$selectedItem) {
EmptyView()
}
}
}
}
}
}
推荐阅读
- loops - 无法在 Flutter 中过滤位置
- pandas - 带有负索引的 Pandas 数据框索引
- python - 如何仅比较 np.datetime64 到一个月?
- azure-devops - 为什么我收到“从进程返回的退出代码 100:文件名 'tf'”
- python - 为整个 python 脚本保留内存
- wordpress - 如何显示每个标签的第一篇文章
- python - Python PyAudio 中的语音识别需要 Visual Studio 错误
- python - 将元组值从列表修改为字符串的快速方法?
- mysql - 如何确保循环关系表的参照完整性
- callback - typed.js - 使用 preStringTyped 在每个新字符串之前调用自定义函数