从 Objective-C 应用程序访问 WidgetCenter

grw*_*lde 9 widget objective-c swiftui ios14

我有一个现有的 Objective-C 应用程序,并为它开发了一个 SwiftUI iOS 14 小部件。到现在为止还挺好。现在我正在尝试从我的 Objective-C 应用程序重新加载时间线。我知道没有用于访问 WidgetCenter 的 Objective-C api,所以我已经实现了 Apple 文档中概述的桥接步骤(至少我认为我是 Swift 的新手)。我似乎无法在我的 Objective-C 应用程序中识别 Widget Center 和 WidgetCenter.shared.reloadAllTimelines()。我尝试了很多方法都没有成功,所以我一定是做错了什么。任何帮助或建议将不胜感激。

inc*_*iko 12

我遇到了同样的问题。对此的解决方案是创建一个 swift 文件,例如:WidgetKitHelper。如果它不是自动生成的,也可以用它创建分配的 swift-objc 头文件(桥接头文件),你可以手动添加它(搜索它)。在 helper 对象中,您可以访问 widgetkit,如果您完成剩下的工作以便能够从您的 objc 代码中看到 swift 代码,您可以将其用作包装器。

提示:

import WidgetKit

@available(iOS 14.0, *)
@objcMembers final class WidgetKitHelper: NSObject {

    class func reloadAllWidgets(){

        #if arch(arm64) || arch(i386) || arch(x86_64)
        WidgetCenter.shared.reloadAllTimelines()
        #endif

    }
}
Run Code Online (Sandbox Code Playgroud)

obj-c 代码:

首先通过添加以下内容导入 swift 代码:

#import "YourProjectName-Swift.h"
Run Code Online (Sandbox Code Playgroud)

然后你可以使用:

[WidgetKitHelper reloadAllWidgets];
Run Code Online (Sandbox Code Playgroud)