美文网首页
OC主工程刷新WidgetKit 桌面小组件

OC主工程刷新WidgetKit 桌面小组件

作者: CocoaJason | 来源:发表于2020-11-01 11:30 被阅读0次

    当想在主工程刷新小组件时,会使用到如下代码

    WidgetCenter.shared.reloadAllTimelines()
    
    1. 尝试在 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

    此文件找不到,但是实际存在 1604200613994.jpg
    if (@available(iOS 14.0, *)) {
            [[WidgetKitManager shareManager] reloadAllTimelines];
            
            [[WidgetKitManager shareManager] reloadTimelinesWithKind:@"Extension_Two"];
        }
    

    备注

     #if arch(arm64) || arch(i386) || arch(x86_64)
                code
                #endif
    

    如果不加上述代码,会打包报错
    刷新单个小组件或者全部小组件根据自己的需求使用,当刷新单个小组件时,传入kind值。

    假如传错或者不传,暂未尝试。

    相关文章

      网友评论

          本文标题:OC主工程刷新WidgetKit 桌面小组件

          本文链接:https://www.haomeiwen.com/subject/nzuyvktx.html