Как создать виджеты, отображаемые на главном экране в iOS 10
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 ярлыки элементов)