Как создать виджеты, отображаемые на главном экране в iOS 10

Мне нужно создавать собственные виджеты на главном экране в iPhone. Я приложил образец изображения. Пожалуйста, дайте мне любую идею, какое расширение будет полезно при создании этого. введите описание изображения здесь

3 ответа

Решение

Swift3 & Xcode8

Для вышеперечисленного вам необходимо создать расширение для вашего основного приложения

  • Какое расширение мне нужно создать, чтобы достичь выше одного?

    Ответ: сегодня расширение

  • Как создать расширение?

    Xcode -> File -> New -> Target -> Today Extension

После создания расширения, если вы хотите передать данные из основного приложения в расширение, вам нужно знать о группах приложений

AppGroups - это не что иное, как обмен данными между Основным приложением и расширениями.

Как добиться?

Просто

Go to Xcode -> Capabilities -> AppGroups Enable -> Click + -> Add a New Container with format group.*

например: group.com.yourCompany.ProjectName

Перейти в главное приложение

Инициализировать настройки по умолчанию с помощью Suite

var appGroupDefaults = UserDefaults.standard
appGroupDefaults = UserDefaults(suiteName:"group.com.yourCompany.ProjectName")!

После инициализации значений по умолчанию с помощью Suite и Set ArrayData или String Data все, что вам нужно передать в расширение

appGroupDefaults.set(value: arrayDataToPasstoTodayExtension, forKey: "arrayDatatoDisplayInToday")

Затем после получения данных в расширении

var appGroupDefaults = UserDefaults.standard
actionGroupDefaults = UserDefaults(suiteName:"group.com.yourCompany.ProjectName")!
let dataArray = appGroupDefaults.value(forKey: "arrayDatatoDisplayInToday")! as! NSMUtableArray
Print("Hurray i got the data from Main App to Extension")

В расширении

Для ShowLess и ShowMore больше параметров в виджете [Сегодня]

override func viewDidLoad() {
    self.preferredContentSize = CGSize(width: 320, height: CGFloat(yourArrayValuesCount.count)*90 )

    if #available(iOSApplicationExtension 10.0, *) {
        self.extensionContext?.widgetLargestAvailableDisplayMode = .expanded
    } else {
        // Fallback on earlier versions
    }
} 
// For iOS 10
@available(iOS 10.0, *)
@available(iOSApplicationExtension 10.0, *)
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
    self.preferredContentSize = (activeDisplayMode == .expanded) ? CGSize(width: 320, height: CGFloat(yourArrayValuesCount.count)*90 ) : CGSize(width: maxSize.width, height: 90)
}

Да, вы можете использовать расширение Today, чтобы показать виджет. Из iOS 10 Если вы включите 3D-ярлыки, то расширение Today (Widget) будет отображаться под 3D-ярлыками. Таким образом, вы можете увидеть виджет в 2 местах. 1. Экран виджета 2. Под 3D ярлыками. (Если вы включите 3D ярлыки элементов)

Другие вопросы по тегам