首页 > 解决方案 > OnTapGesture 在导航链接中无法按预期工作

问题描述

当我点击列表中显示的 NavigationLink 时,我希望代码能够正常工作。

看看这段代码。当我点击 Text("Favorite") 时,代码会移动。

但是当我点击列表时,代码不起作用。

我在 NavigationLink 本身上设置了 onTapesture,但这并没有解决问题

我们如何解决这个问题?

var body: some View {
        NavigationView{
            List{
                NavigationLink(destination: DeliveryServiceList().environmentObject(self.userData)){
                    Text("Favorite")
                    }.onTapGesture {
                         self.userData.showFavoritesOnly.toggle()
                    }
            }.navigationBarTitle(Text("Services"))
        }
    }

标签: swiftswiftui

解决方案


要实现您的要求,请执行以下操作:

var body: some View {
    NavigationView() {
        List {
            NavigationLink(destination: DeliveryServiceList().environmentObject(self.userData)) {
                Text("Favorite")
            }
        }
    }.navigationBarTitle(Text("Services"))
}
}

并将“self.userData.showFavoritesOnly.toggle()”移动到“DeliveryServiceList()”,因为你已经做了“.environmentObject(self.userData)”

在“DeliveryServiceList”中执行以下操作:

 .onAppear {
     self.userData.showFavoritesOnly.toggle()
 }

如果您真的想使用 onTapGesture,您也可以这样做:(来自:在通过 NavigationLink 导航到其他视图之前我该怎么做?

@State var isPresented = false

var body: some View {
    NavigationView {
        List {
            NavigationLink(destination: DeliveryServiceList().environmentObject(self.userData)), isActive: $isPresented) {
                Text("Favorite")
                    .onTapGesture {
                        self.userData.showFavoritesOnly.toggle()
                        self.isPresented = true
                }
            }
            .navigationBarTitle("Services")
        }
    }
}

推荐阅读