使用 tables 來(lái)顯示整列動(dòng)態(tài)改變的數(shù)據(jù)。WatchKit 支持單列Tables(使用WKInterfaceTable類)。以表格的形式顯示數(shù)據(jù)要求預(yù)先定義顯示數(shù)據(jù)的布局并且在運(yùn)行時(shí)把數(shù)據(jù)填充到表格中。具體來(lái)說(shuō),你需要在你的項(xiàng)目中做以下事情:
你可以給表格定義多種類型的行控制器,每一個(gè)都可以有不同的外觀。你可以在運(yùn)行時(shí)確定所需的行控制器類型以及他們排列的順序。更多相關(guān)的信息,請(qǐng)參照 WKInterfaceTable類參考.
行控制器是用來(lái)顯示你表格內(nèi)單一行數(shù)據(jù)的模板。每個(gè)表格需要一個(gè)或者多個(gè)行控制器。比如,你可以用不同的行控制器來(lái)顯示表格主要內(nèi)容、表格頭、表格尾。當(dāng)添加一個(gè)新的表格到場(chǎng)景中時(shí)。Xcode會(huì)自動(dòng)創(chuàng)建一個(gè)初始化的行控制制器,稍后你可以添加更多其他的行控制器.
給表格添加行控制器
每一個(gè)行控制器都有一些初始化元素。你可以把你需要的,比如標(biāo)簽、圖片或者其他對(duì)象添加到行中。標(biāo)簽和圖片的內(nèi)容在設(shè)計(jì)的時(shí)候是無(wú)關(guān)緊要的。在運(yùn)行時(shí),你可以在對(duì)行進(jìn)行配置的時(shí)候把內(nèi)容替換掉。
每一個(gè)行控制器都由一個(gè)自定義類支持,你可以用這個(gè)類來(lái)接入行的內(nèi)容。大部分行控制器都只包含與行的UI控件相關(guān)的屬性,基本上是沒(méi)有代碼的。然而,當(dāng)你給行添加按鍵或者其他可交互的控件時(shí),你的行控制器的相關(guān)類也可以包含對(duì)這些交互事件響應(yīng)的相關(guān)方法。
給行控制器定義自定義類
@property (weak, nonatomic) IBOutlet WKInterfaceLabel *label; //Objective-C
以下是一個(gè)簡(jiǎn)單的行控制器類的定義,這個(gè)例子中,類包含了一個(gè)圖片和一個(gè)標(biāo)簽的輸入口。
SWITT
class MainRowType: NSObject {
@IBOutlet weak var rowDescription: WKInterfaceLabel!
@IBOutlet weak var rowIcon: WKInterfaceImage!
}
OBJECTIVE-C
@interface MainRowType : NSObject
@property (weak, nonatomic) IBOutlet WKInterfaceLabel* rowDescription;
@property (weak, nonatomic) IBOutlet WKInterfaceImage* rowIcon;
@end
創(chuàng)建類并且連接輸入口到對(duì)應(yīng)控件上后,你的行控制器的配置就完成了。你必須給行分配一個(gè)標(biāo)示性字符,以便在創(chuàng)建行時(shí)使用。
在storyboard中配置行控制器
圖 10-1 展示了一個(gè)由代碼10-1定義的標(biāo)示為mainRowType,類為MainRowType的行控制器。輸入口rowDescription和rowIcon分別連接到行中的圖片和標(biāo)簽對(duì)象。
圖 10-1 檢查Xcode中的行控制器
http://wiki.jikexueyuan.com/project/apple-watch-programming-guide/images/table_row_definition_2x.png" alt="figure10-1" />
運(yùn)行時(shí),你可以動(dòng)態(tài)添加行到表格中,并且配置它的內(nèi)容。add and configure rows as part of your interface controller's initialization process.
創(chuàng)建并配置表格中的行
setRowTypes:
和 setNumberOfRows:withRowType:
方法對(duì)對(duì)應(yīng)的行控制器相關(guān)聯(lián)的類進(jìn)行實(shí)例化。調(diào)用這兩個(gè)方法后,會(huì)立即獲取最新創(chuàng)建的行控制器對(duì)象并用它來(lái)配置行。代碼 10-2 展示了一個(gè)簡(jiǎn)單的使用提供的數(shù)據(jù)對(duì)行的標(biāo)簽和圖片進(jìn)行配置的例子。數(shù)據(jù)由一個(gè)自定義數(shù)據(jù)類型 MyDataObject 組成的數(shù)組提供。(MyDataObject
類有一個(gè)字符串和一個(gè)圖片屬性,它的實(shí)現(xiàn)這邊沒(méi)有展示出來(lái))行本則是自定義類型 MainRowType
類的實(shí)例。
代碼 10-2 創(chuàng)建并配置表格的各行
- (void) configureTableWithData:(NSArray *) dataObjects{
[self.table setNumberOfRows:[dataObjects count] withRowType:@"mainRowType"];
for(NSInteger i = 0; i < self.table.numberOfRows; i++){
MainRowType *theRow = [self.table rowControllerAtIndex:i];
MyDataObject *dataObj = [dataObjects objectAtIndex:i];
[theRow.rowDescription setText:dataObj.text];
[theRow.rowIcon setImage:dataObj.image];
}
}
配置表格時(shí),你可以限制初始化時(shí)行的數(shù)量來(lái)提高性能。由于表格的行都是必須在前臺(tái)創(chuàng)建的, 如果創(chuàng)建的數(shù)量過(guò)大會(huì)嚴(yán)重影響你應(yīng)用的性能.具體的數(shù)量限制取決于你數(shù)據(jù)的復(fù)雜程度以及創(chuàng)建行需要的時(shí)間,建議把總數(shù)量限制在20以下。對(duì)于需要更多行的表格,可以考慮在初始化的時(shí)候只加載一部分行,并提供給用戶可控制的展示更多行的方法。更好的解決方案是指顯示最重要的那幾行。比如,你的數(shù)據(jù)為定位數(shù)據(jù)的時(shí)候,把數(shù)據(jù)限制到和用戶當(dāng)前位置相關(guān)的那幾行。
界面控制器可以用來(lái)處理它所持有的任意表格的行選擇事件。當(dāng)用戶點(diǎn)擊表格上的某一行時(shí),WatchKit會(huì)選中那行并調(diào)用控制器的table:didSelectRowAtIndex:方法。使用這個(gè)方法來(lái)執(zhí)行相關(guān)的行為。比如,你可能需要展示一個(gè)新的界面控制器或者刷新行的內(nèi)容。如果你不需要某一行處于可選狀態(tài),可以在storyboard中把對(duì)應(yīng)的行控制器的Selectable選項(xiàng)取消。