SwiftUI:将链接与 onTapGesture 一起使用

Posted

技术标签:

【中文标题】SwiftUI:将链接与 onTapGesture 一起使用【英文标题】:SwiftUI: use Link with onTapGesture 【发布时间】:2021-12-24 12:17:44 【问题描述】:

我想在我的 SwiftUI 视图中指定一个链接,但我也想在Link 是否实际被点击时注册。最好的方法是什么?我尝试在链接上添加onTapGesture(我相信这是一个视图):

Link("Test", destination: URL(string: "testThreePanel://")!)
                    .onTapGesture 
                        print("Testing button link tapped")
                    

onTapGesture 在点击链接时不会被调用。

还有其他方法吗?

【问题讨论】:

【参考方案1】:

你可以试试这个,对我有用,但只适用于 ios15 / macOS12:

// iOS15 / macOS12 only 
Link("Test", destination: URL(string: "https://duckduckgo.com")!)
        .environment(\.openURL, OpenURLAction  url in
            print("---> testing link actioned")
            return .systemAction
        )

【讨论】:

我试过这个并收到一条错误消息:“密钥路径值类型'WritableKeyPath'不能转换为上下文类型'KeyPath'” 这应该只适用于 iOS 15.0 / macOS 12.0 吗?因为我还需要支持 iOS14 / macOS11。 是的,你是对的,它适用于 ios 15、macos 12。问题中没有提到 io14。如果对你没有用,我会删除我的答案。 谢谢。您可以将原始答案标记为仅适用于iOS15 / macOS12,我将其标记为答案。我不相信目前还有其他方法可以做到这一点。 更新了我的答案。

以上是关于SwiftUI:将链接与 onTapGesture 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI .onTapGesture 从未调用过

onTapgesture 禁用 View SwiftUI 的按钮

SwiftUI 使用 onTapGesture 和 onLongPressGesture 处理按钮/视图以及释放操作

SwiftUI:带有onTapGesture的列表单元格内的菜单触发手势

SwiftUI onTapGesture 块 NavigationLink 动作

LazyVGrid onTapGesture 导航到下一个屏幕 swiftUI