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

watchOS 9 SwiftUI下.accessoryCorner复杂功能点击事件处理疑问

处理watchOS 9 SwiftUI中复杂功能点击事件的替代方案

步骤1:创建新的CLKComplicationDescriptor

弃用带userActivity参数的初始化器后,使用基础初始化器定义复杂功能:

let complicationDescriptors = [
    CLKComplicationDescriptor(
        identifier: "accessory_corner_complication",
        displayName: "我的角落复杂功能",
        supportedFamilies: [.accessoryCorner]
    )
]

将这段代码放在ExtensionDelegate的applicationDidFinishLaunching(),或SwiftUI@main结构体通过WKApplicationDelegateAdaptor关联的代理类中。

步骤2:实现复杂功能数据源的getUserActivity方法

在CLKComplicationDataSource子类中,重写getUserActivity(for:withHandler:)方法,返回绑定自定义数据的NSUserActivity:

override func getUserActivity(for complication: CLKComplication, withHandler handler: @escaping (NSUserActivity?) -> Void) {
    let activity = NSUserActivity(activityType: "com.yourdomain.accessoryCornerTap")
    // 传递自定义标识,用于后续区分操作
    activity.userInfo = ["target": "cornerAction"]
    handler(activity)
}

用户点击复杂功能时,系统会调用该方法并将返回的活动对象传递给应用。

步骤3:在SwiftUI应用中监听并处理活动

在SwiftUI根视图上添加onContinueUserActivity修饰符,监听自定义活动类型并执行逻辑:

@main
struct WatchApp: App {
    @WKApplicationDelegateAdaptor(ExtensionDelegate.self) var delegate
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .onContinueUserActivity("com.yourdomain.accessoryCornerTap") { userInfo in
                    if let target = userInfo["target"] as? String, target == "cornerAction" {
                        // 在这里执行点击后的操作,如跳转视图、触发状态更新
                        print("角落复杂功能被点击")
                    }
                }
        }
    }
}

补充说明

  • watchOS复杂功能不支持iOS小组件的widgetURL机制,必须通过ClockKit的NSUserActivity路由处理。
  • 自定义活动类型需与App Bundle ID关联,确保全局唯一性。
  • 该方案适配所有复杂功能类型(包括.accessoryCorner)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:14:57