Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека Разработчика iOS

Разработчик

Руководство по программированию часов Apple

PDF
На этой странице

Интерфейсные объекты

Вы управляете своим приложением WatchKit объекты интерфейса использования UI. Интерфейсный объект является экземпляром WKInterfaceObject класс, или более в частности один из его подклассов. Платформа WatchKit обеспечивает интерфейсные объекты для большинства (но не все) визуальных элементов, которые можно добавить к UI в файлах раскадровки. Интерфейсные объекты не являются представлениями. Они - объекты прокси, связывающиеся с помощью беспроводных технологий с фактическими представлениями, используемыми для реализации UI на Часах Apple.

Создание интерфейсного объекта

Вы создаете интерфейсные объекты косвенно путем добавления объявленный свойствами к контроллеру интерфейса и соединения тех свойств с соответствующими элементами в файле раскадровки. Вы никогда не выделяете и инициализируете интерфейсные объекты сами. Во время инициализации Вашего объекта контроллера интерфейса WatchKit создает интерфейсные объекты для любых связанных выходов автоматически.

Когда добавление объявило свойства для интерфейсных объектов, установило класс надлежащего типа и включает IBOutlet ключевое слово в Вашем объявлении. Например, объявление для метки следующие:

Swift

  • class MySwiftInterfaceController {
  • @IBOutlet weak var label: WKInterfaceLabel!
  • }

Objective C

  • @interface MyHelloWorldController()
  • @property (weak, nonatomic) IBOutlet WKInterfaceLabel* label;
  • @end

Соедините каждое заявленное свойство в своем контроллере интерфейса к соответствующему элементу в Вашей раскадровке. Быстрый способ создать объявления свойства и подключить их к элементу состоит в том, чтобы использовать заместителя редактора в XCode. После отображения заместителя редактора перетащите управление от элемента в Вашей раскадровке к интерфейсному определению Вашего класса для создания выхода. (В Swift перетащите к своему определению класса.) После запроса Вас для имени выхода, XCode создает объявление свойства в Вашем классе и подключает его к элементу раскадровки.

Конфигурирование интерфейса во время проектирования

Во время проектирования используйте XCode для конфигурирования появления визуальных элементов в раскадровках. Для многих связанных с расположением атрибутов время проектирования является единственным временем, можно сконфигурировать атрибут. Например, можно изменить текст метки, цвет и шрифт с помощью a WKInterfaceLabel объект, но Вы не можете изменить число строк или высоту каждой строки. Те атрибуты должны быть сконфигурированы в XCode, как показано на рисунке 7-1.

Фигурируйте 7-1Configuring объект метки image: ../Art/formatted_text_attributes_2x.png

Для получения дополнительной информации о том, как сконфигурировать интерфейсные объекты, посмотрите классы для своих интерфейсных объектов в Ссылке Платформы WatchKit.

Изменение интерфейса во время выполнения

В коде Вашего расширения WatchKit Вы обновляете UI своего приложения вызывающими методами любых интерфейсных объектов, на которые ссылаются. Контроллер интерфейса может измениться, конфигурация его интерфейса возражает только, в то время как это активно, который включает время инициализации. В Вашем init, awakeWithContext:, и willActivate методы, вызовите методы для присвоения значений данных меткам, изображениям и другим объектам в пользовательском интерфейсе. Вы могли бы также обновить их от методов действия своего контроллера интерфейса.

Во время инициализации важно позволить WatchKit инициализировать Ваш класс контроллера интерфейса прежде, чем сделать что-либо еще. Методы инициализации WKInterfaceController и его подклассы - то, где WatchKit создает интерфейсные объекты Вашего приложения. Таким образом, любой код инициализации, который Вы пишете для своих контроллеров интерфейса, должен вызвать super реализация сначала. Перечисление 7-1 показывает пример init метод для контроллера интерфейса, содержащего выход (вызванный label) для a WKInterfaceLabel объект.

Перечисление 7-1Initializing контроллер интерфейса

Swift

  • override init {
  • // Initialize variables here.
  • super.init
  • // It is now safe to access interface objects.
  • label.setText("Hello New World")
  • }

Objective C

  • - (instancetype)init {
  • // Always call super first.
  • self = [super init];
  • if (self){
  • // It is now safe to access interface objects.
  • [self.label setText:@“Hello New World];
  • }
  • return self;
  • }

Для улучшения производительности и время работы от батареи платформа WatchKit оптимизирует любые попытки установить значения на интерфейсных объектах приложения. Каждый раз, когда Вы устанавливаете значения для одного или более интерфейсных объектов в той же итерации цикла выполнения, новые значения объединяются и передаются к Часам Apple в едином пакете для повышения эффективности. Объединение изменений означает, что только то, которые в последний раз изменяются на данное свойство объекта, отправляется в устройство. Что еще более важно установка того же свойства к тому же значению генерирует сообщение журнала, чтобы помочь Вам разыскать двойные вызовы.

Для получения информации о методах Вы используете, чтобы сконфигурировать Ваши интерфейсные объекты, видеть соответствующие описания класса в Ссылке Платформы WatchKit.

Ответ на взаимодействие с пользователем

Используйте кнопки, переключатели и другие интерактивные средства управления для инициирования изменений в приложении. Когда кнопка касается или значение другого управления изменения, WatchKit вызывает связанный метод действия в Вашем контроллере интерфейса. Каждый тип интерфейсного объекта имеет требуемый формат для своего метода действия, которые перечислены в Таблице 7-1. Измените имя методов действия для чего-то подходящего для Вашего приложения.

Таблица 7-1Action методы для интерфейсных объектов

Объект

Objective C

Swift

Кнопка

- (IBAction)buttonAction

@IBAction func buttonAction()

Переключатель

- (IBAction)switchAction:(BOOL)on

@IBAction func switchAction(value: Bool)

Ползунок

- (IBAction)sliderAction:(float)value

@IBAction func sliderAction(value: Float)

Пункт меню

- (IBAction)menuItemAction

@IBAction func menuItemAction()

Интерфейсы могут использовать переходы или table:didSelectRowAtIndex: метод контроллера интерфейса для ответа на касания в строке таблицы. Используйте переход для отображения другого контроллера интерфейса. До выполнения перехода WatchKit вызывает contextForSegueWithIdentifier:inTable:rowIndex: или contextsForSegueWithIdentifier:inTable:rowIndex: метод Вашего контроллера интерфейса так, чтобы можно было указать объекты контекста для использования при отображении контроллера интерфейса. Если Вы используете table:didSelectRowAtIndex: метод вместо перехода, можно выполнить любые действия, являются подходящими для ответвления на строке.

После того, как Ваш контроллер интерфейса инициализируется и на экране, WatchKit вызывает методы Вашего контроллера интерфейса только, когда пользователь взаимодействует с Вашим интерфейсом. Если Вы хотите обновить свой пользовательский интерфейс без вмешательства пользователя, необходимо сконфигурировать NSTimer возразите и используйте его обработчик для выполнения любых необходимых задач.

Для задач, которые могли бы взять больше, чем секунда или два, рассмотрите передавание тех задач к Вашему родительскому приложению для iOS для выполнения. Продолжительные задачи, такие как доступ к сети и контроль расположения лучше всего обрабатываются родительским приложением, которое может тогда передать ту информацию назад к Вашему расширению WatchKit через совместно используемый каталог контейнера группы. Для получения информации о передаче задач к Вашему родительскому приложению посмотрите Связь Непосредственно с Вашим Содержанием приложения для iOS.

Сокрытие интерфейсных объектов

Сокрытие объектов позволяет Вам использовать тот же контроллер интерфейса для отображения различных типов содержания. Каждая сцена в Вашем файле раскадровки должна содержать все интерфейсные объекты, должен был вывести на экран его содержание во время выполнения. При настройке интерфейса на основе данных, Вы имеете в наличии, можно скрыть объекты, в которых Вы не нуждаетесь. При сокрытии объекта Вы эффективно удаляете его из своего интерфейса. Во время расположения обрабатываются скрытые элементы, как будто они были удалены полностью из расположения в целом. Для сокрытия объекта вызовите setHidden: метод и передача значение YEStrue.