xcode - 如何在WatchKit中重用WKInterfaceTable

标签 xcode watchkit apple-watch

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

enter image description here

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

此外,对于每个页面,我都必须将 socket 连接到表行 Controller ,本质上是一遍又一遍地重复自己。这是一个例子:

enter image description here

有没有办法重用表?

我考虑过继承,但是documentation告诉我不要子类化 WKInterfaceTable。这也排除了以编程方式创建表的可能性。

最佳答案

您应该使用表和各种行类型创建一个界面 Controller 。然后你想创建一个与我的答案非常相似的架构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]
    )
}

这将使用同一界面 Controller 重新加载页面集,该界面 Controller 显示相应上下文中的所有数据。

关于xcode - 如何在WatchKit中重用WKInterfaceTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28973471/

相关文章:

ios - LLDB 堆栈跟踪仅显示 XCode 中的最后 2 次调用

c++ - 在 Xcode 中从 Cern 设置 ROOT,正确链接图书馆员

objective-c - NSOpenPanel 无法使用空格从文件名正确访问 NSUrl

swift - 使用动画设置 WKInterfacePicker 高度选择任意项目

ios - WatchOS 2 的 Watch Extension 中的 Assets.xcassets

ios - 我可以在 Swift 中构建 watch 应用程序并将其添加到不是在 Swift 中构建的 iOS 应用程序吗?

ios - iPhone 关机时 WatchKit 应用程序会发生什么情况?

ios - 我可以在没有 iOS 设备的情况下在 iTunes Remote 上发布应用程序吗?

watchkit - watch 操作系统 2 : Run code when a user puts on his watch

ios - 你能得到 Apple Watch 的大概电量百分比吗?