如何将数据从模态视图列表传递到 SwiftUI 中的父视图?

How to pass data from a modal view list to parent view in SwiftUI?

我(可能)有一个与 SwiftUI 状态管理相关的简单问题。

A​​ 有一个带有简单按钮列表的模态视图:

struct ExerciseList: View {
    var body: some View {
        List {
            ForEach(1..<30) { _ in
                Button("yoga") {
                    
                }
            }
        }
    }
}

父视图是这个:

struct SelectExerciseView: View {
  
    @State private var showingSheet = false
    @State private var exercise = "select exercise"
    
    var body: some View {
        Button(exercise) {
            showingSheet.toggle()
        }
           .sheet(isPresented: $showingSheet){
               ExerciseList()
           }
    }
}

如何将选定的按钮文本从列表传递到父视图?
我在想我需要在模态中使用一个 Binding 变量并使用它,但不确定在这个例子中如何使用它。

在最基本的情况下,您需要在父视图 (SelectExerciseView) 中选择练习作为状态变量。然后,您通过绑定将其传递给子视图(模态)。假设 exercise 作为字符串包含您要更改的变量:

.sheet(isPresented: $showingSheet) {
  ExerciseList(exercise: $exercise)
}

然后您的模态框需要有一个 @Binding 引用。

struct ExerciseList: View {
  @Binding var exercise: Exercise

  var body: some View {
    List {
      ForEach(1..<30) { _ in
        Button("yoga") {
          exercise = "yoga"                    
        }
      }
    }
  }
}

我不确定你在问什么...

您是否尝试从模态显示“详细信息视图”。

意味着父视图 -> 模态视图 -> 详细视图

在你的情况下,它将是 SelectExerciseView -> ExerciseListView -> DetailView显示在上一个视图中按下的按钮的文本(可以是您想要的任何视图)

如果这就是您想要做的,我会使用 NavigationLink 而不是模式上的按钮。 NavigationLink 的目的地将是详细视图