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 {
@WidgetBundleBuilder
var 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:
xxx
case .type2:
xxx
case......
default:
xxx
}
優點:
1.可以實作超過5種類型的元件添加
2.一次在桌面展示多個同尺寸不同類型的Widget
3.友善對Widget的尺寸進行區分和界面呈現和新類型的Widget添加。
缺點:
1.使用者對于元件的編輯就得移動到主程式中,使用者配置就隻剩下Widget的類型選擇!!!
2.控制Widget重新整理時無法指定到特定的Widget上,隻能重新整理同尺寸的所有Widgets。
配置
Intent的配置如下圖所示:
ContentType配置
效果:
參考文獻
本人新手,如果有寫錯的地方歡迎指正,期待和大家一起交流開發。
《iOS14 Widget開發踩坑(一)修正版-初識别與重新整理》
《iOS14WidgetKit開發實戰1-4》