[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…

相關文章
相關標籤/搜索