天天看點

iOS14 Widget開發踩坑(二)修正版-多個小元件前言添加多個小元件Widgets的限制重點:突破5個小元件限制的一種實作方法參考文獻

iOS14 Widget開發踩坑(二)修正版-多個小元件

  • 前言
  • 添加多個小元件
      • 情況1.對于已經寫好的一個小元件
      • 情況2.對于建立好還沒寫的小元件
  • Widgets的限制
  • 重點:突破5個小元件限制的一種實作方法
      • 優點:
      • 缺點:
      • 配置
      • 效果:
  • 參考文獻

前言

2020年12月3日

經過進一步的學習 發現了文章中還有很多錯誤,請酌情觀看,,,最新的修改版等我學習确認無誤後再釋出!

2020年10月3日修正版

在對Widget進行開發了一個月後,解決了幾個問題,對本文進行重新編輯以糾正以前的錯誤和适應最新版本。

本文主要解決如何添加多個小元件的問題和方法。

添加多個小元件

在網上搜尋到的文章對于如何建立多個小元件都一筆帶過了,例如《[iOS14]WidgetKit開發實戰1-初識iOS小部件》中的描述讓我這個SwiftUI新手一臉懵逼。

iOS14 Widget開發踩坑(二)修正版-多個小元件前言添加多個小元件Widgets的限制重點:突破5個小元件限制的一種實作方法參考文獻

最後經過幾次失敗的嘗試終于得到了正确的打開方式。

情況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的配置如下圖所示:

iOS14 Widget開發踩坑(二)修正版-多個小元件前言添加多個小元件Widgets的限制重點:突破5個小元件限制的一種實作方法參考文獻

ContentType配置

iOS14 Widget開發踩坑(二)修正版-多個小元件前言添加多個小元件Widgets的限制重點:突破5個小元件限制的一種實作方法參考文獻

效果:

iOS14 Widget開發踩坑(二)修正版-多個小元件前言添加多個小元件Widgets的限制重點:突破5個小元件限制的一種實作方法參考文獻

參考文獻

本人新手,如果有寫錯的地方歡迎指正,期待和大家一起交流開發。

《iOS14 Widget開發踩坑(一)修正版-初識别與重新整理》

《iOS14WidgetKit開發實戰1-4》