You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中点击Menu内ShareLink时触发额外操作的实现方法

解决SwiftUI Menu中ShareLink触发额外操作的问题

要在Menu内的ShareLink被点击时同时执行自定义操作,无需依赖UIKit,可以利用iOS 16.4及以上版本中ShareLink提供的onTrigger(perform:)修饰符,这是官方专门用于处理分享触发时额外逻辑的API,能完美兼容默认分享行为。

为什么之前的方法失效

  • 直接添加onTapGesture:ShareLink内部自带交互手势,优先级高于外部添加的tap手势,导致自定义逻辑无法触发。
  • 用Button包裹ShareLink:Button的点击事件会拦截ShareLink的默认交互,仅执行Button的action,分享弹窗不会唤起。
  • 使用simultaneousGesture:同样因为ShareLink内部手势的高优先级,同步手势无法被响应。

可行代码示例

struct ContentView: View {
    var body: some View {
        VStack {
            Menu("options") {
                Button {
                    print("button 1 is pressed")
                } label: {
                    Text("Test Menu Button")
                }
            
                shareLinkButton
            }
        }
    }
    
    var shareLinkButton: some View {
        ShareLink(item: URL(string: "https://stackoverflow.com/")!) {
            Label {
                Text("hello")
            } icon: {
                Image(systemName: "apple.logo")
            }
        }
        .onTrigger { // 分享触发时执行自定义操作
            print("ShareLink triggered!")
        }
    }
}

说明

  • onTrigger(perform:)会在用户点击ShareLink并唤起分享界面的同时执行闭包内的代码,完全不影响ShareLink的默认功能。
  • 该API要求iOS 16.4、macOS 13.3、watchOS 9.4或更高版本。

内容的提问来源于stack exchange,提问作者Pete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:03:14