OC主工程刷新WidgetKit 桌面小组件
2020-11-01 本文已影响0人
CocoaJason
当想在主工程刷新小组件时,会使用到如下代码
WidgetCenter.shared.reloadAllTimelines()
- 尝试在
AppDelegate.m
中导入WidgetKit
头文件
WX20201101-111048@2x.png
如图,会发现只有两个头文件,打开头文件后,找不到我们想要使用的代码定义。
2.由于第一步,所以我们创建 WidgetKitManager.swift
文件,
由于主工程是纯OC工程,因此创建时会提示我们创建桥接文件。
SwiftUIAndAppDemo-Bridging-Header
3.我们需要在WidgetKitManager.swift中编写刷新小组件的代码
import WidgetKit
@objc
@available(iOS 14.0, *)
class WidgetKitManager: NSObject {
@objc
static let shareManager = WidgetKitManager()
/// MARK: 刷新所有小组件
@objc
func reloadAllTimelines() {
#if arch(arm64) || arch(i386) || arch(x86_64)
WidgetCenter.shared.reloadAllTimelines()
#endif
}
/// MARK: 刷新单个小组件
/*
kind: 小组件Configuration 中的kind
*/
@objc
func reloadTimelines(kind: String) {
#if arch(arm64) || arch(i386) || arch(x86_64)
WidgetCenter.shared.reloadTimelines(ofKind: kind)
#endif
}
}
4.在需要使用Swift代码的地方导入头文件,名字为主工程名-Swift.h
if (@available(iOS 14.0, *)) {
[[WidgetKitManager shareManager] reloadAllTimelines];
[[WidgetKitManager shareManager] reloadTimelinesWithKind:@"Extension_Two"];
}
备注
#if arch(arm64) || arch(i386) || arch(x86_64)
code
#endif
如果不加上述代码,会打包报错
刷新单个小组件或者全部小组件根据自己的需求使用,当刷新单个小组件时,传入kind值。
假如传错或者不传,暂未尝试。