鍍金池/ 教程/ iOS/ Tables
上下文菜單
更新記錄
文本與標(biāo)簽
使用 iOS 技術(shù)
開發(fā)您的 Watch 應(yīng)用
Watch 應(yīng)用結(jié)構(gòu)
預(yù)覽概要
界面對(duì)象
UI 概要
Tables
配置 Xcode 項(xiàng)目
圖片
通知要點(diǎn)
設(shè)置
界面導(dǎo)航
管理你的預(yù)覽界面
管理自定義 Long Look 界面

Tables

使用 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)目中做以下事情:

  • 在storyboard文件中:
    • 添加table對(duì)象到你的Controller場(chǎng)景中。給table對(duì)象創(chuàng)建一個(gè)輸出口(outlet)
    • 依照 配置你的行類型中描述的方式來(lái)配置你表格中的行控制器.
  • 在代碼中:

你可以給表格定義多種類型的行控制器,每一個(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è)初始化的行控制制器,稍后你可以添加更多其他的行控制器.

給表格添加行控制器

  1. 在Storyboard中選中表格對(duì)象.
  2. 打開屬性探測(cè)器(Attributes inspector).
  3. 用Rows屬性來(lái)改變可用的行控制器的數(shù)量.

每一個(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)方法。

給行控制器定義自定義類

  1. 添加一個(gè)Cocoa Touch 類到你的WatchKit擴(kuò)展中
  2. 讓你新創(chuàng)建的類繼承自NSObject。
  3. 把運(yùn)行時(shí)需要接入的屬性,如標(biāo)簽、圖片等添加到類中。確保這些屬性使用以下的格式,保證屬性的類型和對(duì)應(yīng)的界面上的控件類型相同:
@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中配置行控制器

  1. 在storyboard中,選中行控制器對(duì)象。
  2. 給行控制器設(shè)置一個(gè)唯一的標(biāo)示性標(biāo)簽。稍后創(chuàng)建表格行的時(shí)候會(huì)用到標(biāo)示。這個(gè)值必須確保在行類型中是唯一的,除此之外沒(méi)有其他限制。在屬性探測(cè)器中設(shè)置這個(gè)標(biāo)示。
  3. 把這個(gè)行控制器的類設(shè)成你的自定義類。并在Identifty Inspector中設(shè)置標(biāo)示。
  4. 創(chuàng)建并連接標(biāo)簽以及其他元素的輸入口,運(yùn)行時(shí),WatchKit需要這些信息來(lái)創(chuàng)建行的界面對(duì)象。

圖 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í)配置表格內(nèi)容

運(yùn)行時(shí),你可以動(dòng)態(tài)添加行到表格中,并且配置它的內(nèi)容。add and configure rows as part of your interface controller's initialization process.

創(chuàng)建并配置表格中的行

  1. 基于你需要展示的數(shù)據(jù)來(lái)確定行的數(shù)量和類型
  2. 使用setRowTypes:setNumberOfRows:withRowType:方法來(lái)創(chuàng)建行。兩個(gè)方法都可以在WatchKit擴(kuò)展中創(chuàng)建行并且實(shí)例化行所對(duì)應(yīng)的類。實(shí)例化后的類儲(chǔ)存在表格中,可以通過(guò)rowControllerAtIndex:方法接入。
  3. 使用rowControllerAtIndex:方法來(lái)對(duì)行進(jìn)行迭代。
  4. 使用行控制器對(duì)象來(lái)配置行的內(nèi)容

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)取消。

上一篇:界面導(dǎo)航下一篇:預(yù)覽概要