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

前言

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

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

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

项目地址: github.com/Littleor/iW…bash

前面几期的连接:app

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

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

小部件用户配置

小部件用户配置界面不须要咱们本身去写了,WidgetKit已经为咱们作好了,咱们须要的只是添加一个SiriIntent来获取咱们须要的数据便可,而后Widgetkit会自动生成对应的配置界面,用户只须要长按小部件后点击Edit Widget便可配置Widget的数据了。post

1.添加对应的SiriIntent

左上角导航选择File->New->File而后找到Siri Intent Definition File以后添加到WidgetExtension中便可。 学习

添加Siri Intent Definition File

2.配置Siri Intent Definition File

这里的配置须要根据你对Widget须要的数据来配置测试

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

添加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吧!

项目地址: github.com/Littleor/iW…

相关文章
相关标签/搜索