iOS14 Widget开发踩坑(二)修正版-多个小组件
- 前言
- 添加多个小组件
-
-
- 情况1.对于已经写好的一个小组件
- 情况2.对于新建好还没写的小组件
-
- Widgets的限制
- 重点:突破5个小组件限制的一种实现方法
-
-
- 优点:
- 缺点:
- 配置
- 效果:
-
- 参考文献
前言
2020年12月3日
经过进一步的学习 发现了文章中还有很多错误,请酌情观看,,,最新的修改版等我学习确认无误后再发布!
2020年10月3日修正版
在对Widget进行开发了一个月后,解决了几个问题,对本文进行重新编辑以纠正以前的错误和适应最新版本。
本文主要解决如何添加多个小组件的问题和方法。
添加多个小组件
在网上搜索到的文章对于如何创建多个小组件都一笔带过了,例如《[iOS14]WidgetKit开发实战1-初识iOS小部件》中的描述让我这个SwiftUI新手一脸懵逼。
最后经过几次失败的尝试终于得到了正确的打开方式。
情况1.对于已经写好的一个小组件
新建一个Swift文件,将写好的小组件放到新的文件里后,直接将创建时的入口文件的小组件代码直接替换成下面这样。其中的NextWidget 和 NewWidget 就是你的两个小组件。注意:这个列表里最多放5个小组件,多了会报错:Extra argument in call!
注意:放到这个结构体里的Widget如:NextWidget和NewWidget,在编写时要去除@main才能和这个方法兼容。
import SwiftUI@main
struct Widgets: WidgetBundle {
@WidgetBundleBuildervar body: some Widget {
NextWidget()NewWidget()}
}
情况2.对于新建好还没写的小组件
就可以直接将创建时的入口文件中的小组件代码替换成上面这样,再在新的文件里写小组件。
Widgets的限制
1.上面提到的,最多只能有5个小组件,一个小组件有3种尺寸,共计15个。
2.使用到小组件的代码都必须是标准的SwiftUI或者调用Swift的方法,我试图使用Swift或OC创建界面后应用到小组件都失败了,但是可以使用MVC的模式将View封装到新的Swift文件里,暴露接口即可。
3.注意:在小组件中使用了主项目创建的文件时,必须在该文件的Target Membership中勾选上小组件的Target。
重点:突破5个小组件限制的一种实现方法
注意:这个方法只适合不需要用户在小组件上进行数据配置且个数大于5个的情况,用户配置数据可以到主程序进行!!!
struct Widgets: WidgetBundle 只允许介入5个Widget,如果你开发的数量超过5个。就可以将小组件的类型改为用户配置,在写Widget时以尺寸(小/中/大)作为区分依据。使用SiriKit Intent文件让用户选择需要展示的组件类型。快照界面就只是显示提示用户进行类型选择的提示语。
在getTimeline和WidgetEntryView中使用configuration.type进行区分,来加载不同的数据和界面即可。
switch configuration.type {
case .type1:xxxcase .type2:xxxcase......default:xxx
}
优点:
1.可以实现超过5种类型的组件添加
2.一次在桌面展示多个同尺寸不同类型的Widget
3.方便对Widget的尺寸进行区分和界面呈现和新类型的Widget添加。
缺点:
1.用户对于组件的编辑就得移动到主程序中,用户配置就只剩下Widget的类型选择!!!
2.控制Widget刷新时无法指定到特定的Widget上,只能刷新同尺寸的所有Widgets。
配置
Intent的配置如下图所示:
ContentType配置
效果:
参考文献
本人新手,如果有写错的地方欢迎指正,期待和大家一起交流开发。
《iOS14 Widget开发踩坑(一)修正版-初识别与刷新》
《iOS14WidgetKit开发实战1-4》