【问题标题】:How to implement handleUserActivity in WatchOS in SwiftUI?如何在 SwiftUI 中的 WatchOS 中实现 handleUserActivity?
【发布时间】:2021-02-02 19:43:10
【问题描述】:

我已经向我的complicationDescriptors 传递了一个包含我的并发症名称的userInfo 字典,这样我就可以知道用户点击了哪个并发症并将它们启动到该视图。由于其他原因,我正在使用新的@App@WKExtensionDelegateAdaptor,因此我可以在extensionDelegate 中访问handleUserActivity,并且可以解压缩复杂功能的来源,但是如何将它们启动到特定视图在 SwiftUI 中? handleUserActivityseems to be set upWKInterfaceControllers 合作?

class ExtensionDelegate: NSObject, WKExtensionDelegate {

    let defaults = UserDefaults.standard
    
    func applicationDidFinishLaunching() {
        //print("ApplicationDidFinishLanching called")
        
        scheduleNextReload()
        
    }
    
    
    func applicationWillResignActive() {
        //print("applicationWillResignActive called")
    }
    
    func handleUserActivity(_ userInfo: [AnyHashable : Any]?) {
        
        if let complication = userInfo?[TrackerConstants.complicationUserTappedKey] as? String {
            
            if complication == TrackerConstants.recoveryDescriptorKey {
                //What now?
            } else if complication == TrackerConstants.exertionDescriptorKey {
                //What now?
            }
        }
        
    }

【问题讨论】:

  • 我正在努力实现同样的目标。你想通了吗?尝试以编程方式导航到新视图。
  • @alamodey 不,我永远无法让它工作????
  • 您是否能够传递给handlUserActivity 正在呈现哪个并发症值?我有一个并发症,每分钟显示一个新值,我不知道如何传递正在呈现的值。

标签: swift swiftui watchos apple-watch-complication


【解决方案1】:

this answer 的启发下,我设法根据userInfo 的点击并发症更新了我的视图。

首先声明一个通知名称:

extension Notification.Name {
    static let complicationTapped = Notification.Name("complicationTapped")
}

在你的ExtensionDelegate

func handleUserActivity(_ userInfo: [AnyHashable : Any]?) {
    if let complication = userInfo?[TrackerConstants.complicationUserTappedKey] as? String {
        NotificationCenter.default.post(
            name: Notification.Name.complicationTapped,
            object: complication
        )
    }   
}

终于在你看来:

struct ContentView: View {
    @State private var activeComplication: String? = nil

    var body: some View {
        NavigationView { // or TabView, etc
        // Your content with NavigationLinks
        }
        .onReceive(NotificationCenter.default.publisher(
            for: Notification.Name.complicationTapped
        )) { output in
            self.activeComplication = output.object as? String
        }
    }
}

有关如何从此处激活视图的更多信息,请参阅Programmatic navigation in SwiftUI

【讨论】:

    猜你喜欢
    • 2019-11-16
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    相关资源
    最近更新 更多