【Swift UI】アプリ側からWidgetを更新する方法!WidgetCenter
この記事からわかること
- Swift UIでWidgetをアプリ側から更新する方法
- WidgetCenterのreloadAllTimelinesメソッドの使い方
- sharedプロパティやreloadTimelines(ofKind:)、getCurrentConfigurationsの使い方
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
SwiftUIでWidgetを実装している場合にアプリ側からデータを更新した際にWidgetビューも更新させる方法をまとめていきます。
アプリ側からWidgetを更新する方法
アプリ側からWidgetを更新するにはWidgetCenter
のreloadAllTimeline
メソッドを使用します。使用するためにはWidgetKit
を読み込む必要があります。
import WidgetKit
WidgetCenter.shared.reloadAllTimelines()
このメソッドを実行するとWidgetを表示させるためのタイムラインが更新されます。
WidgetCenterクラス
WidgetCenter
はWidgetの設定情報を取得したり、タイムラインを更新するための機能を提供するクラスです。
sharedプロパティ
またこのクラスはシングルトンパターンなのでアプリ内に生成するインスタンスは必ず1つであることが保証されます。
インスタンスにはshared
プロパティから参照することができます。
reloadAllTimelinesメソッド
reloadAllTimelines
は全てのWidgetのタイムラインを更新するメソッドです。
WidgetCenter.shared.reloadAllTimelines()
reloadTimelines(ofKind:)メソッド
reloadTimelines(ofKind:)
は指定した種類のWidgetのタイムラインを更新するメソッドです。引数にはWidgetの設定で指定した識別文字列(kind)を渡します。
@main
struct TestWidget: Widget {
let kind: String = "TestWidget"
var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: Provider()) { entry in
TestWidgetEntryView(entry: entry)
}
.configurationDisplayName("My Widget")
.description("This is an example widget.")
}
}
WidgetCenter.shared.reloadTimelines(ofKind: "TestWidget")
getCurrentConfigurations(_:)メソッド
getCurrentConfigurations(_:)
はWidgetに関する設置情報を取得できるメソッドです。completionHandlerで配列形式に格納されたWidgetごとの設定情報にアクセスできるようになっています。
func getCurrentConfigurations(_ completion: @escaping (Result<[WidgetInfo], Error>) -> Void)
配列内の要素はWidgetInfo
型になっており、以下の情報を保持しています。
struct WidgetInfo {
public let configuration: INIntent?
public let family: InternalWidgetFamily
public let kind: String
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。