本文所用到的 Demo 能够在这里下载: github.com/zhenyunzhan…
一、创立Widget Extension
1、创立Widget Target
点击 Project —> 增加新的Target —> 查找Widget Extension —> 点击Widget Extension —> 点击 Next
2、增加装备信息
Include Configuration Intent 是创立 intentdefinition 文件用的,能够让用户动态装备组件,能够先不勾选,后期能够手动创立
3、增加Widget
创立好之后就能够运转程序,程序运转完结之后,长按主屏幕进入修正状况,点击主屏幕右上方增加按钮,找到程序,就能够增加Widget,简略体验下了
二、大致了解 Widget 文件
检查创立完 Widget Extension 后默认生成的 xxxx Widget.swift 文件,Xcode 为咱们生成了 Widget 所需的模版代码,如下这个文件
widget的进口
@main标识的部分
view
EntryView 是咱们实际展现的UI
数据
Entry 是用来携带widget展现需求的数据
Provider Timeline的提供目标,包括TimelineEntry & ReloadPolicy,用来后续改写 Widget 内容
三、开发
以Demo为例,做一个展现古诗内容的Widget,间隔一段时刻后主动更新widget内容,而且能够主动挑选古诗内容来跟新Widget,比方如下:
展现古诗内容 -> 长按后可修正小组件 -> 进入挑选界面 -> 挑选并更新
四、静态装备 StaticConfiguration
创立完 Widget Extension Target之后,体系会给咱们创立好一个Widget的开发模板
1、TimelineEntry
自己创立的模型作为参数,模型 (itemModel) 用 swift 或者 OC创立均可
2、界面款式
界面有三种尺度的类型,每种尺度还能够预备不同的布局,另外界面填充的数据就来源于 TimelineEntry
3、Timeline时刻线
完成 TimelineProvider 协议 getTimeline 办法,主要是构建 Entry 和 reloadPolicy,用这两个参数初始化 Timeline ,之后再调用completion回调,回调会走到 @main ,去更新 Widget 内容。
demo中是每次改写 Timeline ,创立一个 Entry, 则更新一次主屏幕的 Widget 内容, 改写间隔为 60 分钟,留意:
-
atEnd
一切的entry履行完之后,再次调用 getTimeline 结构数据 -
after(date)
不论这次结构的entry 是否履行完,等体系时刻抵达date之后,就会在调用getTimeline -
never
最终一个 entry 展现结束之后 Widget 就会一直坚持那个 entry 的显现内容
开发完结后,能够运转代码,试一下作用,此刻的更新时刻有点长,能够改为 5 秒后再试。
五、动态装备 IntentConfiguration
程序运转到这里,有的会想,怎么完成修正小组件功能,动态装备 widget 的显现内容呢?
1、创立 intentdefinition 文件
command + N 组合键创立新 File —> 查找 intent
挑选xxx.intentdefinition文件 —>点击下方 + ,挑选intent创立 —> 对intent命名
这个 intent 文件包括了你一切的(intents),经过这个文件编译到你的app中,体系将能够读取你的 intents ,一旦你界说了一个intent文件,Xcode也会为你生成一个intent类别
2、能够增加到 intent 中的参数类型
参数类型有多种,下方为一些示例 参数类型分别为:String、Boolean、Integer时的展现
你也能够用自己界说的类型去设置,参数也支持多个值
3、如何为小组件增加丰厚的装备
a、确认装备目标
以这个demo为例,小组件只能显现一首古诗,可是app中有很多首古诗,这就能够创立多个 古诗 组件,然后经过动态装备,每个小组件想要显现不同的古诗。这样的比方还有很多,比方某个人有多张银行卡,每个组件显现不同银行卡余额
b、装备intent文件
category选项设置为View,然后勾选下图中的选项,现在咱们能够只重视小组件选项,将方便指令的勾选也取消,如下图
c、intent增加参数
使用参数列表中的 + 按钮,增加一个参数
Type类型能够挑选自界说的type
参数增加完后,体系会在ClickBtnIntent类中生成相应的特点
随后ClickBtnIntent 的实例将在运转时传递到 小组件扩展中,让你的小组件知道用户装备了什么,以及要显现什么
d、代码中的更改
StaticConfiguration 切换为 IntentConfiguration,相应的provider也改为IntentTimelineProvider,provider就不上截图了,能够去demo中的ClickBtn.swift文件检查
现在运转APP,然后长按古诗小组件,挑选修正小组件,会弹出带有Btn Type的参数,点击Btn Type一栏弹出带有查找的列表页面。 作用如下:
显现的Btn Type便是下图中框选Display Name,自己能够随便起名字,中英文均可
现在,带有查找的列表页面是一个空白页面,假如想要使其有数据,则要都选Dynamic Options复选框,为其增加动态数据
e、如何为列表增加动态数据?
勾选了Dynamic Options复选框,体系会主动生成一个ClickBtnIntentHandling协议,能够点开ClickIntent类去检查,现在有了intent文件,有了新的可恪守协议,就需求有一个Extension去恪守协议,完成协议里面的办法,为查找列表提供数据
- 点击Project —> 新建target —> 查找intent —> 挑选 Intents Extentsion
- 贴上类的办法,以及办法对应的作用图
f、留意点
完成IntentHandler时,Xcode会报找不到ClickBtnIntentHandling这个协议的错误,
- 引入头文件 Intents
- 需求将下图所标的地方做下修正
六、APP创立多个Widget
这个比较简略,按照demo中的比方处理一下就能够,如下图:
现在测验,最多能够同时创立五个不同的Widget