在Apple Watch里使用table,首先要进入apple Watch的storyboard,
在object library里拖进来一个table。然后为其table row controller 创建一个controller类,继承自NSObject,不要忘了import WatchKit.row中的组件可以自由从object library里拖进来,要在controller里相应地为其创建outlet。回到interfaceController,把整个table创建outlet连接到interfaceController。这样,就可在interfaceController中控制table,而table中的row由自己的controller控制。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| import WatchKit
import Foundation
class InterfaceController: WKInterfaceController {
@IBOutlet weak var minionTable: WKInterfaceTable!
var minions = MinionsDataSource().minions
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
loadTableData();
}
override func willActivate() {
super.willActivate()
}
override func didDeactivate() {
super.didDeactivate()
}
private func loadTableData() {
minionTable.setNumberOfRows(minions.count, withRowType: "1")
for (index, minionName) in enumerate(minions) {
let row = minionTable.rowControllerAtIndex(index) as tableController
row.label.setText(minionName)
}
}
}
import UIKit
import WatchKit
class tableController: NSObject {
@IBOutlet weak var label: WKInterfaceLabel!
}
class MinionsDataSource {
let minions = ["Bob", "Dave", "Jerry", "Jorge", "Kevin",
"Mark", "Phil", "Stuart", "Tim"]
}
|
和iOS上tableview的实现方法大同小异。AppleWatch上的row需要自定义,而iOS上的cell提供了几种预设,预设外还可以自定义。当使用预设的时候,不需要自己创建cell的类。另外,ios上已经有完备的Table View Controller使用,只需实现相关的方法,当在storyboard上制定了Table View Controller的代码文件,datasource和delegate也相应指定了。而在apple watch上没有现成的Table View Controller。
。
在row添加push需要从storyboard中拖入一个interface controller,并且创建一个该controller的代码文件,继承自WKInterfaceController , 注意创建文件时target要选择extension。
在父interface controller中overwrite代码
1 2 3 4 5 6
| override func contextForSegueWithIdentifier(segueIdentifier: String, inTable table: WKInterfaceTable, rowIndex: Int) -> AnyObject? { let minionName = minions[rowIndex] return minionName }
|
在子interface controller中
1 2 3 4 5 6 7
| override func awakeWithContext(context: AnyObject?) { super.awakeWithContext(context) if let minionName = context as? String { label1.setText(minionName) } }
|