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
相关产品推荐
相关产品推荐

