swift 来自图纸修改器的绑定

epggiuax  于 2022-12-26  发布在  Swift
关注(0)|答案(1)|浏览(146)

我正在一个视图上使用SwiftUI工作表修改器,该视图有一个从其视图模型发布的集合。当用户单击列表项时,我将为列表中的相应项设置一个可选的State值。工作表修改器使用$selectedSubscription值在需要时显示和隐藏工作表。并将值传递给闭包,以便我在细节视图中使用它。我已经设置了细节视图来接收对列表项的@Binding,以便在稍后阶段编辑它。问题是SwiftUI不允许我将闭包中的项作为绑定传递。

struct SubscriptionsListView: View {
    
    @StateObject var vm = SubscriptionsListVM()
    
    @State private var selectedSubscription: PVSubscription? = nil
    
    var body: some View {
        NavigationView {
            ZStack {
                ...
            }
            .sheet(item: $selectedSubscription) { subscription in
                SubscriptionDetailsView(subscription: $subscription) <--- error here
                    .presentationDetents([.medium, .large])
            }
        }
    }
}

struct SubscriptionDetailsView: View {

@Binding var subscription: PVSubscription

...

}

我已经尝试从数组中获取该项的索引,并将其作为绑定传递,但没有成功。

f5emj3cl

f5emj3cl1#

这个问题是由工作表修饰符的使用引起的。您试图使用“selectedSubscription”变量来显示工作表和模型的细节。您必须创建另一个变量来显示工作表。
因为你的工作表只显示一个视图,你不需要带item参数的工作表修改器。Item参数用于在同一个工作表修改器中显示不同的视图(设置,配置文件等)。它不给予你一个绑定在尾部闭包中放入子视图。

struct SubscriptionsListView: View {

    @StateObject var vm = SubscriptionsListVM()

    @State private var selectedSubscription: PVSubscription? = nil

    @State private var showSheet: Bool = false

    var body: some View {
        NavigationView {
            ZStack {
                ... // Toggle show sheet here
            }
            .sheet(isPresented: $showSheet) {
                SubscriptionDetailsView(subscription: $selectedSubscription)
                    .presentationDetents([.medium, .large])
            }
        }
    }
 }

相关问题