如何在 SwiftUI 中的 WatchOS 中实现 handleUserActivity?
Posted
技术标签:
【中文标题】如何在 SwiftUI 中的 WatchOS 中实现 handleUserActivity?【英文标题】:How to implement handleUserActivity in WatchOS in SwiftUI? 【发布时间】:2021-02-02 19:43:10 【问题描述】:我已经向我的complicationDescriptors
传递了一个包含我的并发症名称的userInfo
字典,这样我就可以知道用户点击了哪个并发症并将它们启动到该视图。由于其他原因,我正在使用新的@App
和@WKExtensionDelegateAdaptor
,因此我可以在extensionDelegate
中访问handleUserActivity
,并且可以解压缩复杂功能的来源,但是如何将它们启动到特定视图在 SwiftUI 中? handleUserActivity
seems to be set up 与WKInterfaceControllers
合作?
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
正在呈现哪个并发症值?我有一个并发症,每分钟显示一个新值,我不知道如何传递正在呈现的值。
【参考方案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
【讨论】:
以上是关于如何在 SwiftUI 中的 WatchOS 中实现 handleUserActivity?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 WatchOS 的 SwiftUI 列表中删除分隔符?
SwiftUI:当 List 和 ForEach 嵌入 TabView 时 WatchOS 8.1 中的 NavigationView 错误
watchOS - 如何从扩展委托更新 SwiftUI 视图
在watchOS中使用.listRowBackground时如何将cornerRadius添加到SwiftUI List Cell?