首页 > 解决方案 > 导航前单击 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)
           }
   }
}


有没有其他方法可以执行相同的任务?帮我解决这个问题

标签: swiftui

解决方案


您可以使用 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()
                    }
                }
            }
        }
    }
}

推荐阅读