Войти

App for Apple Watch

В этом туториале мы не будем затрагивать WatchConnectivity, а разработаем простой интерфейс, добавим activity индикатор (его нет по умолчанию в WatchKit) и разберемся с тестированием приложения.

Начнём

Приложение для Apple Watch является расширением (target) для основного приложения. Чтобы создать заготовку, нужно перейти в File -> New -> Target, и выбрать Watch OS:

Как видите, у нас появилось два новый таргета: Watch и Watch Extension. Первый таргет отвечает за работу с UI, основная работа с интерфейсом будет здесь. В Watch Extension мы будем обрабатывать события и реализовывать поведение нашего приложения.

Если вы хотите изменить вид превью в файле Interface.storyboard, нужно внизу найти кнопку View as:

Мы разберем разработку интерфейса на примере таблицы. Остальные элементы проще и не вызовут у вас вопросов. Перетащите новый объект Table из библиотеки:

Вы увидите на превью серую TableRow. Обратите внимание, ячейки являются классом Table Row Controller.

Нам нужно реализовать класс ячейки. Для этого перетащите из библиотеки необходимые объекты. Я перетащу две UILabel:

Внешний вид настраивать будем тоже здесь. Для начала выберите группу и установите в инспекторе vertical лейаут. После найдите секцию size ниже и установите для высоты size to Fit Content.

Теперь выберите первую Label и для font установите Title 2. Вся работа с шрифтом и размером текста заключается в выборе из списка доступных стилей.

Установим дополнительный отступ. Выберите группу, и найдите проперти Insets, установите его в custom. Установим следующие значения:
10 / 10 / 12 / 12

Остается добавить закругление ячейке. Это можно сделать в поле Radius, я установлю значение 18. Вы можете найти еще много различных настроек, поэкспериментируйте.

Table

А мы переходим к работе с таблицей. Для заполнения ее контентом, нам нужно создать класс ячейки и присвоить ей идентификатор. Для этого в Watch Extenshion создадим новый файл: ExampleRowController.swift. Файл будет выглядеть так:

import WatchKit

class ExampleRowController: NSObject {}

Скоро мы добавим сюда IBOutlet и получим доступ к кастомизации контента. Пока же установим в сториборде класс ячейки и идентификатор в ExampleRowController.

Перейдем к реализации контроллера. В том же таргете Watch Extenshion создадим новый файл: ExampleController.swift. Код должен выглядеть так:

class KindController: WKInterfaceController {

 @IBOutlet weak var table: WKInterfaceTable!

 override func awake(withContext context: Any?) {
  super.awake(withContext: context)

  self.table.setNumberOfRows(10, withRowType: "ExampleRowController")
  for index in 0..<self.table.numberOfRows {
   guard let controller = self.table.rowController(at: index) as? ExampleRowController else { continue }
  }
 }
}

Как вы понимаете, нам нужно теперь связать Table из сториборда с IBOutlet в файле. В методе .setNumberOfRows мы указываем количество и идентификатор ячейки.

В следующей функции мы конфигурируем все ячейки. Это немного отличается от того, что мы видели в UITableViewDataSource, но выглядит просто. Попробуйте. Если сейчас вы запустите проект, то увидите 10 ячеек с одинаковым текстом.

Теперь нам нужно связать наши Label с IBOutlet для класса ячейки. Я не буду подробно останавливаться на этом, приведу код класса:

import WatchKit

class ExampleRowController: NSObject {

 @IBOutlet weak var titleLabel: WKInterfaceLabel!
 @IBOutlet weak var subtitleLabel: WKInterfaceLabel!
}

Сделаем небольшие изменения в тексте конфиграции ячеек в классе ExampleController:

for index in 0..<self.table.numberOfRows {
 guard let controller = self.table.rowController(at: index) as? ExampleRowController else { continue }
 controller.titleLabel.setText("Title: \(index)")
 controller.subtitleLabel.setText("Subtitle: \(index)")
}

Теперь остается запустить проект. Мы должны увидеть 9 ячеек с их индексами:

Стоит глянуть