2015-03-10 2 views
2

Я выбрал макет страницы для моего приложения WatchKit. На каждой странице отображается таблица. Я хочу, чтобы расположение таблицы было одинаковым на всех страницах. Я буду подавать отфильтрованные данные на каждую страницу во время выполнения, поэтому по существу страницы будут идентичными, за исключением того, что данные будут разными.Как повторно использовать WKInterfaceTable в WatchKit

enter image description here

Одним из способов достижения этой цели является вручную создать экземпляр InterfaceController для каждой страницы в InterfaceBuilder, а затем заполнить с GUI элементов и соединить выходы. Проблема здесь в том, когда я хочу что-то изменить (например, переместите ярлык или добавьте кнопку), мне придется применять это изменение последовательно к каждой странице.

Кроме того, для каждой страницы мне нужно подключить выходы к контроллеру строки таблицы, повторяя снова и снова. Вот иллюстрация:

enter image description here

Есть ли способ повторного использования таблицы?

Я считал наследование, но documentation говорит мне не подкласса WKInterfaceTable. Это также исключает создание таблицы программно.

ответ

2

Вы должны создать единый контроллер интерфейса с таблицей и различными типами строк. Затем вы хотите создать архитектуру, очень похожую на мой ответ here. У вас будет только один PageOneInterfaceController, который должен быть назван TableInterfaceController в этом примере с TableInterfaceIdentifier в качестве идентификатора. Тогда вы могли бы сделать следующее:

MainInterfaceController.swift

func awakeWithContext(context: AnyObject?) { 
    super.awakeWithContext(context) 

    let context1 = "context 1 - for you to fill out" 
    let context2 = "context 2 - for you to fill out" 
    let context3 = "context 3 - for you to fill out" 

    WKInterfaceController.reloadRootControllersWithNames(
     ["TableInterfaceIdentifier", "TableInterfaceIdentifier", "TableInterfaceIdentifier"], 
     contexts: [context1, context2, context3] 
    ) 
} 

Это перезагрузит набор страниц, используя один и тот же контроллер интерфейса, который отображает все данные в соответствующем контексте.

+0

Пригвожден. Спасибо, что прыгнул. – bgilham

+0

Awesome. @bgilham: Я вижу, что вы говорили по существу то же самое, но это действительно помогает. – user443854

2

Для этого необходимо предоставить один и тот же номер WKInterfaceController в reloadRootControllersWithNames:contexts: несколько раз, но предоставить каждому другому контекст.

+0

Работает ли он со страничным интерфейсом? Не могли бы вы указать мне пример? Я читаю документ «Навигация интерфейса», и похоже, что вы предлагаете работать только с иерархическим интерфейсом. – user443854