Я сделал динамический виджет и успешно отобразил данные CoreData в динамической конфигурации. Я хочу отфильтровать данные CoreData на основе WidgetFamily виджета, например:
Отображает данные на .accessoryRectangular с forMainScreen, равным true.
Отображает данные на .systemLarge с forMainScreen, равным false.
Буду благодарен, если кто-нибудь поможет, вот мой код:
struct Provider: IntentTimelineProvider {
typealias Entry = CountingEntry
typealias Intent = CountingConfigurationIntent
func getSnapshot(for configuration: CountingConfigurationIntent, in context: Context, completion: @escaping (CountingEntry) -> Void) {
let entry = CountingEntry(date: Date(), configuration: configuration)
completion(entry)
}
func placeholder(in context: Context) -> CountingEntry {
let entry = CountingEntry(date: Date(), configuration: CountingConfigurationIntent())
return entry
}
func getTimeline(for configuration: CountingConfigurationIntent, in context: Context, completion: @escaping (Timeline) -> Void) {
let entry = CountingEntry(date: Date(), configuration: configuration)
let timeline = Timeline(entries: [entry], policy: .never)
completion(timeline)
}
}
struct CountingEntry: TimelineEntry {
let date: Date
let configuration: CountingConfigurationIntent
}
struct CountingWidgetEntryView : View {
@Environment(\.widgetFamily) var family: WidgetFamily
var entry: Provider.Entry
var body: some View {
switch family {
//....
}
}
}
struct CountingWidget: Widget {
let kind: String = "CountingWidget"
var body: some WidgetConfiguration {
IntentConfiguration(kind: kind, intent: CountingConfigurationIntent.self, provider: Provider()) { entry in
CountingWidgetEntryView(entry: entry)
}
.supportedFamilies([.accessoryRectangular, .accessoryCircular, .systemSmall, .systemMedium, .systemLarge])
.contentMarginsDisabled()
}
}
class IntentHandler: INExtension, CountingConfigurationIntentHandling {
func provideWidgetTypeOptionsCollection(for intent: CountingConfigurationIntent, with completion: @escaping (INObjectCollection?, Error?) -> Void) {
if let data = getWidgetData() {
let categories = data.map { item in
let categorie = CountingType(identifier: String(item.id), display: item.name ?? "nil")
categorie.countingType = item.image
return categorie
}
completion(INObjectCollection(items: categories), nil)
}
}
override func handler(for intent: INIntent) -> Any {
return self
}
func getWidgetData() -> [WidgetModel]? {
let viewContext = PersistenceController.shared.container.viewContext
let request = NSFetchRequest(entityName: "WidgetModel")
//here
request.predicate = NSPredicate(format: "forMainscreen == %@", NSNumber(value: true))
request.sortDescriptors = [NSSortDescriptor(key: "id", ascending: true)]
do {
return try viewContext.fetch(request)
} catch {
print(error.localizedDescription)
return nil
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/783 ... he-widgetf
Измените содержимое конфигурации настраиваемого виджета на основе WidgetFamily. ⇐ IOS
Программируем под IOS
1712816361
Anonymous
Я сделал динамический виджет и успешно отобразил данные CoreData в динамической конфигурации. Я хочу отфильтровать данные CoreData на основе WidgetFamily виджета, например:
Отображает данные на .accessoryRectangular с forMainScreen, равным true.
Отображает данные на .systemLarge с forMainScreen, равным false.
Буду благодарен, если кто-нибудь поможет, вот мой код:
struct Provider: IntentTimelineProvider {
typealias Entry = CountingEntry
typealias Intent = CountingConfigurationIntent
func getSnapshot(for configuration: CountingConfigurationIntent, in context: Context, completion: @escaping (CountingEntry) -> Void) {
let entry = CountingEntry(date: Date(), configuration: configuration)
completion(entry)
}
func placeholder(in context: Context) -> CountingEntry {
let entry = CountingEntry(date: Date(), configuration: CountingConfigurationIntent())
return entry
}
func getTimeline(for configuration: CountingConfigurationIntent, in context: Context, completion: @escaping (Timeline) -> Void) {
let entry = CountingEntry(date: Date(), configuration: configuration)
let timeline = Timeline(entries: [entry], policy: .never)
completion(timeline)
}
}
struct CountingEntry: TimelineEntry {
let date: Date
let configuration: CountingConfigurationIntent
}
struct CountingWidgetEntryView : View {
@Environment(\.widgetFamily) var family: WidgetFamily
var entry: Provider.Entry
var body: some View {
switch family {
//....
}
}
}
struct CountingWidget: Widget {
let kind: String = "CountingWidget"
var body: some WidgetConfiguration {
IntentConfiguration(kind: kind, intent: CountingConfigurationIntent.self, provider: Provider()) { entry in
CountingWidgetEntryView(entry: entry)
}
.supportedFamilies([.accessoryRectangular, .accessoryCircular, .systemSmall, .systemMedium, .systemLarge])
.contentMarginsDisabled()
}
}
class IntentHandler: INExtension, CountingConfigurationIntentHandling {
func provideWidgetTypeOptionsCollection(for intent: CountingConfigurationIntent, with completion: @escaping (INObjectCollection?, Error?) -> Void) {
if let data = getWidgetData() {
let categories = data.map { item in
let categorie = CountingType(identifier: String(item.id), display: item.name ?? "nil")
categorie.countingType = item.image
return categorie
}
completion(INObjectCollection(items: categories), nil)
}
}
override func handler(for intent: INIntent) -> Any {
return self
}
func getWidgetData() -> [WidgetModel]? {
let viewContext = PersistenceController.shared.container.viewContext
let request = NSFetchRequest(entityName: "WidgetModel")
//here
request.predicate = NSPredicate(format: "forMainscreen == %@", NSNumber(value: true))
request.sortDescriptors = [NSSortDescriptor(key: "id", ascending: true)]
do {
return try viewContext.fetch(request)
} catch {
print(error.localizedDescription)
return nil
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78308176/modify-the-configuration-content-of-the-configurable-widget-based-on-the-widgetf[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия