如何在 WatchKit 中重用 WKInterfaceTable

How to reuse WKInterfaceTable in WatchKit

我为我的 WatchKit 应用选择了基于页面的布局。每页显示一个table。我想让 table 的布局在所有页面上完全相同。我将在 运行 时向每个页面提供过滤后的数据,因此页面基本上是相同的,只是数据不同。

实现此目的的一种方法是在 InterfaceBuilder 中为每个页面手动创建 InterfaceController 实例,然后填充 GUI 元素并连接插座。这里的问题是每当我想更改某些内容(例如,移动标签或添加按钮)时,我都必须将更改一致地应用到每个页面。

此外,对于每个页面,我都必须将插座连接到 table 行控制器,基本上一遍又一遍地重复自己。这是一个例子:

有没有办法重用 table?

我考虑过继承,但是 documentation 告诉我不要继承 WKInterfaceTable。这也排除了以编程方式创建 table。

为此,请在 reloadRootControllersWithNames:contexts: 中多次提供相同的 WKInterfaceController,但为每个提供不同的上下文。

您应该使用 table 和各种行类型创建一个单一的界面控制器。那么你想创建一个与我的答案非常相似的架构 。您将只有一个 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]
    )
}

这将使用在相应上下文中显示所有数据的相同界面控制器重新加载页面集。