[iOS14]WidgetKit开发实战3-小部件用户配置

    技术2022-07-11  83

    前言

    2020年06月22日的WWDC上iOS14的新特性-小部件正式在iOS上线,同时WidgetKit也正式面向广大开发者使用。

    也正是因为对Android的小部件有所了解,故想尝试下iOS的小部件的开发,并且发现当前并没有相关的文章,故记录下我学习WigetKit的经历,以下均为自己学习路上的经历,可能会有些问题,还望大佬指正。

    同时已把学习路上写的代码开源 - iWiget,看完这篇文章认为有用就点个Star呗!

    项目地址: https://github.com/Littleor/iWidget

    前面几期的链接:

    (iOS14)WidgetKit开发实战1-初识iOS小部件

    [iOS14]WidgetKit开发实战2-开发一言小部件

    小部件用户配置

    小部件用户配置界面不需要我们自己去写了,WidgetKit已经为我们做好了,我们需要的只是添加一个SiriIntent来获取我们需要的数据即可,然后Widgetkit会自动生成对应的配置界面,用户只需要长按小部件后点击Edit Widget即可配置Widget的数据了。

    1.添加对应的SiriIntent

    左上角导航选择File->New->File然后找到Siri Intent Definition File之后添加到WidgetExtension中即可。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uINVc18X-1593615454530)(https://user-gold-cdn.xitu.io/2020/6/28/172f6f88de8c8b0a?w=1438&h=1082&f=png&s=102476)]

    2.配置Siri Intent Definition File

    这里的配置需要根据你对Widget需要的数据来配置

    打开Siri Intent Definition File后由于是新建的文件应该是空的,这个时候先在导航栏找到Editor添加Intent

    添加完成之后应该是这样的

    然后在对Intent进行配置

    注意不是对Response配置哦!

    注意Target要选择到Widget Extensive哦!

    目前Xcode12-beta有bug,需要重启Xcode之后才会显示配置项!

    目前Xcode12-beta有bug,需要重启Xcode之后才会显示配置项!

    目前Xcode12-beta有bug,需要重启Xcode之后才会显示配置项!

    其中type必须换成View然后Title换成自己的命名(后面会用到这个Intent) Parameter中添加你需要用户输入的内容即可,这里使用content做个示范(String类型).

    3.修改Widget配置

    打开Swift文件,把Widget内容替换为Intent

    public var body: some WidgetConfiguration { IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider(), placeholder: PlaceholderView()) { entry in WidgetDemoEntryView(entry: entry) } .configurationDisplayName("My Widget") .description("This is an example widget.") }

    再将Provider类型换为IntentTimelineProvider:

    下面是Xcode自动生成的代码 很多没必要的 主要是改为IntentTimelineProvider

    struct Provider: IntentTimelineProvider { public func snapshot(for configuration: ConfigurationIntent, with context: Context, completion: @escaping (SimpleEntry) -> ()) { let entry = SimpleEntry(date: Date(), configuration: configuration) completion(entry) } public func timeline(for configuration: ConfigurationIntent, with context: Context, completion: @escaping (Timeline<Entry>) -> ()) { var entries: [SimpleEntry] = [] // Generate a timeline consisting of five entries an hour apart, starting from the current date. let currentDate = Date() for hourOffset in 0 ..< 5 { let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)! let entry = SimpleEntry(date: entryDate, configuration: configuration) entries.append(entry) } let timeline = Timeline(entries: entries, policy: .atEnd) completion(timeline) } }

    再在view中显示内容:

    struct DemoWidgetEntryView : View { var entry: Provider.Entry var body: some View { Text(entry.content == nil ? "PlaceHolder" : entry.content!) } }

    4.运行到真机测试

    总结

    iOS的Widgetkit对于用户配置的开发实在太友好了,只需要使用Xcode提供的可视化工具添加参数即可生成配置界面,方便快捷,UI统一。

    相比Andorid使用指定的设置Fragment来讲,方便快捷多了。

    对于小部件的配置Widgetkit已经直接封装到了Intent的参数中,只需要添加后在Entry中使用即可。

    后记

    这一次大概整理了下Widget添加用户配置界面的大概过程,还有小部件点击交互操作下次再分享,敬请期待。

    完整代码见GitHub

    后续还会慢慢完善WidgetKit开发的文章,同时iWiget也会不断完善,这篇文章对你有用就点个Star吧!

    项目地址: https://github.com/Littleor/iWidget

    Processed: 0.014, SQL: 9