Farlanki

在Apple Watch里使用table

字数统计: 446阅读时长: 2 min
2015/03/16 Share

在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
//interfaceController.swift
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();

// Configure interface objects here.

}



override func willActivate() {

// This method is called when watch view controller is about to be visible to user

super.willActivate()

}



override func didDeactivate() {

// This method is called when watch view controller is no longer visible

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)



}

}

}





//rowController.swift


import UIKit

import WatchKit

class tableController: NSObject {



@IBOutlet weak var label: WKInterfaceLabel!

}

//DataSourse.swift
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)

}
}
CATALOG