Сегодня
Расширения приложения в представлении Today вызывают виджетами. Виджеты предоставляют пользователям быстрый доступ к информации, это важно прямо сейчас. Например, пользователи открывают представление Today, чтобы проверить текущие курсы акций или погодные условия, видеть сегодняшнее расписание или выполнить быструю задачу, такую как маркировка элемента, как сделано. Пользователи склонны открывать представление Today часто, и они ожидают информацию, которой они интересуются быть немедленно доступными.
Сегодня виджет может появиться на экране блокировки устройства на iOS, если пользователь включил это. Они делают так в области «Allow Access When Locked» путем движения в Настройки> Touch ID & Passcode> Представление Уведомлений.
Поймите сегодня виджеты
На обеих платформах Сегодня должен виджет:
Гарантируйте, что содержание всегда выглядит актуальным
Соответственно реагируйте на взаимодействие с пользователем
Выполните хорошо (в частности виджеты iOS должны использовать память мудро, или система может завершить их),
Поскольку взаимодействие с пользователем с Сегодня виджетами быстро и ограничено, необходимо разработать простой, оптимизированный UI, выделяющийся, информационные пользователи интересуются. В целом это - хорошая идея ограничить число интерактивных элементов в виджете. В частности обратите внимание на то, что виджеты iOS не поддерживают запись клавиатуры.
Пользователи конфигурируют Сегодня виджеты по-другому в зависимости от платформы, которую они используют.
iOS. Поскольку Сегодня виджеты не позволяют запись клавиатуры, пользователи должны быть в состоянии использовать содержание приложения для конфигурирования содержания и поведения виджета. В виджете Акций, например, пользователи могут переключиться между различными представлениями значения символа, но они должны открыть приложение Акций для управления списком символов.
OS X. Содержание приложения не могло бы выполнить функции, таким образом, Сегодня виджет, возможно, должен дать пользователям способы сконфигурировать его, в то время как это работает. Например, виджет Акций в OS X позволяет пользователям найти и добавить символы рынка, которые они хотят отследить. API Центра Уведомления в OS X включает методы, которые можно использовать, чтобы позволить пользователям сконфигурировать виджеты.
После того, как пользователи устанавливают приложение, содержащее Сегодня виджет, они могут добавить виджет к представлению Today. Когда пользователи выбирают Edit в представлении Today, Центр Уведомления показывает представление, позволяющее пользователям добавить, переупорядочить и удалить виджеты.
Используйте XCode, сегодня обрабатывают по шаблону
Шаблон Xcode Today обеспечивает заголовок по умолчанию и файлы реализации для основного класса (названный TodayViewController
), Info.plist
файл и интерфейсный файл (т.е. раскадровка или xib файл).
По умолчанию шаблон Today предоставляет следующий Info.plist
ключи и значения (показанный здесь для цели OS X):
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.widget-extension</string>
<key>NSExtensionPrincipalClass</key>
<string>TodayViewController</string>
</dict>
При использовании пользовательского подкласса контроллера представления используйте пользовательское имя класса для замены TodayViewController
значение для NSExtensionPrincipalClass
ключ.
iOS. Если Вы не хотите использовать файл раскадровки, предоставленный шаблоном, удалите NSExtensionMainStoryboard
ключ и добавляет NSExtensionPrincipalClass
ключ, с помощью имени контроллера представления для значения.
Большая часть работы, которую Вы выполняете для создания Сегодня виджет, включает разработку UI и реализацию подкласса контроллера представления, выполняющего пользовательскую функциональность.
Разработайте UI
Поскольку пространство в представлении Today ограничивается, и ожидаемый пользовательский опыт быстр и фокусируется, Вы не должны создавать виджет, это является слишком большим по умолчанию. На обеих платформах Сегодня виджет должен соответствовать в ширине представления Today, но это может увеличиться в высоте для отображения большего количества содержания.
Сегодня создаваемое использование виджета шаблона Xcode Today включает Автоматические Ограничения макета для стандартных граничных вставок. Для получения значений вставки для вычислений реализуйте widgetMarginInsetsForProposedMarginInsets:
метод. (Основной контроллер представления шаблона соответствует NCWidgetProviding
протокол, обеспечивающий этот метод.) Убедиться нарисовать все Ваше содержание виджета в этих стандартных граничных вставках. Для узнавания больше о разработке появления виджета посмотрите Сегодня Виджеты в Инструкциях по Интерфейсу пользователя iOS.
Если виджет имеет дополнительное содержание для отображения, можно полагаться на Автоматические Ограничения макета для регулирования высоты виджета как надлежащей. Если Вы не используете Автоматическое Расположение, можно использовать UIViewController
свойство preferredContentSize
запрашивать высоту на виджет. Например:
- (void)receivedAdditionalContent {
self.preferredContentSize = [self sizeNeededToShowAdditionalContent];
}
iOS. Если Вы хотите анимировать дисплей своего содержания для совпадения с изменять размеры анимацией, реализацией viewWillTransitionToSize:withTransitionCoordinator:
, использование animateAlongsideTransition:completion:
добавить Ваши анимации к coordinator
параметр.
Чтобы гарантировать, что Ваш виджет получает эффект вибрации, это подходяще для отображения элементов в представлении Today, использовать notificationCenterVibrancyEffect
.
OS X. Виджеты наследовались NSAppearanceNameVibrantDark
от представления их контроллер представления помещается в. При использовании стандартных средств управления Вы автоматически получаете правильное появление. Если Вы используете пользовательские цвета, несомненно, выберут цвета, выглядящие хорошими в вибрирующем темном представлении.
Обновление содержания
Сегодня точка расширения обеспечивает API для управления состоянием виджета и обработки обновлений к ее содержанию (можно читать об этом API в Ссылке Платформы Центра Уведомления). Несмотря на то, что существует несколько специфичных для платформы различий в Сегодня API, функциональность, поддерживаемая на обеих платформах, является главным образом тем же.
Чтобы помочь Вашему виджету выглядеть актуальным, система иногда получает снимки представления Вашего виджета. Когда виджет становится видимым снова, новый снимок выведен на экран, пока система не заменяет его активной версией представления.
Для обновления состояния виджета перед, снимок взят, убедиться соответствовать NCWidgetProviding
протокол. Когда Ваш виджет получает widgetPerformUpdateWithCompletionHandler:
вызовите, обновите представление своего виджета с новым содержанием и вызовите обработчик завершения, с помощью одной из следующих констант для описания результата обновления:
NCUpdateResultNewData
— Новое содержание потребовало, чтобы Вы перерисовали представлениеNCUpdateResultNoData
— Виджет не требует обновленияNCUpdateResultFailed
— Ошибка произошла во время процесса обновления
Указание, когда должен появиться виджет
Если Ваш виджет должен быть видим в представлении Today только при определенных обстоятельствах — такой как тогда, когда это имеет новое или примечательное содержание — используют setHasContent:forWidgetWithBundleIdentifier:
метод от NCWidgetController
класс. Этот метод позволяет Вам объявить состояние содержания виджета, поочередно запрашивающего систему показывать или скрывать виджет.
Можно вызвать setHasContent:forWidgetWithBundleIdentifier:
метод от Вашего виджета или от его содержания приложения. Действительно, в то время как виджет не работает, содержание приложения может вызвать этот метод даже. Например, можно использовать уведомление нажатия содержанию приложения для инициирования вызова к этому методу. В следующий раз, когда пользователь открывает представление Today, Ваш виджет видим.
Чтобы объявить, что Ваш виджет не имеет никакого содержания и может поэтому быть скрыт, вызовите setHasContent:forWidgetWithBundleIdentifier:
метод с a flag
значение параметра NO
false
. Центр уведомления не запустит Ваш виджет снова, пока содержание приложения не вызовет эту передачу метода YES
true
в flag
параметр, чтобы указать, что виджет имеет содержание для отображения.
Открытие содержания приложения
В некоторых случаях это может быть целесообразным для Сегодня виджет, чтобы запросить его содержание приложения открыться. Например, когда пользователи щелкают по событию, Календарный виджет в OS X открывает Calendar. (Обратите внимание на то, что в iOS, пользователю, вероятно, придется разблокировать устройство, прежде чем сможет открыться содержание приложения.), Чтобы гарантировать, что Ваше содержание приложения открывается в пути, который целесообразен в контексте текущей задачи пользователя, необходимо определить пользовательскую схему URL, которую могут использовать и приложение и его виджеты.
Виджет непосредственно не говорит его содержанию приложения открываться; вместо этого, это использует openURL:completionHandler:
метод NSExtensionContext
сказать системе открывать свое содержание приложения. Когда виджет использует этот метод для открытия URL, система проверяет запрос прежде, чем выполнить его.
Поддержка редактирований ( только OS X)
Для поддержки режима редактирования в виджете OS X соответствуйте NCWidgetProviding
протокол. Когда Вы устанавливаете widgetAllowsEditing
свойство к YES
true
, кнопка Info автоматически выведена на экран в области заголовка Вашего виджета. (Когда пользователи нажимают кнопку Info, она автоматически переключается на кнопку Done.), Когда Вы используете NCWidgetProviding
когда представление входит в режим редактирования, протокол для поддержки редактирования, Редактирования, Сделанного, и Кнопки отмены, автоматически предоставлен.
Для наблюдения изменений между редактированием и нередактированием режимов в виджете используйте widgetDidBeginEditing
и widgetDidEndEditing
методы NCWidgetProviding
протокол.
Если Вы также хотите представить модальный поисковый UI, в то время как пользователи редактируют Ваш виджет, используйте NCWidgetProvidingPresentationStyles
категория на NSViewController
представить Ваш поисковый контроллер представления. Когда пользователи указывают, что они сделаны, ища, используйте dismissViewControllerAnimated:completion:
метод для отклонения поискового контроллера представления. (Обратите внимание на то, что можно также использовать presentViewControllerInWidget:
метод для представления непоискового модального представления, для которого нужна Кнопка отмены в области заголовка.)
Тестирование сегодня виджет
iOS. Можно протестировать виджет iOS в Средстве моделирования iOS или на устройстве.
OS X. Для тестирования виджета в OS X является самым простым использовать Средство моделирования Виджета XCode, потому что Центр Уведомления отклоняет, как только Вы переключаетесь на другое приложение или щелчок вне его границ. Можно указать Средство моделирования Виджета в схеме цели виджета.
Для приобретения знаний об отладке расширений приложения в целом посмотрите Отладку, Профиль и Тест Расширение Приложения.