WatchKit程式設計指南:WatchKit Apps–表格

發表於2014-12-17

1418720197791879

使用table展示內容可動態更改的列表資料。WatchKit 僅支援使用WKInterfaceTable類的單列表格。想要在table中展示資料,需要先為資料定義佈局,並在執行時通過編碼填寫表資料。您需要在Xcode工程中做以下事情:

在storyboard檔案中:

  • 給介面控制器場景新增table物件,並在介面控制器中為table建立一個outlet。
  • 像Configuring Row Types描述的那樣為table配置一個或多個row types。

在程式碼中:

您可以為每個table定義多個行型別,每種型別都有不同的外觀。在執行時,您可以指定所需行型別以及它們在table中的排列順序。對於如何配置table的詳細資訊,請參看WKInterfaceTable Class Reference.

配置Row Types

Row Type是一個在table中以單行形式展示資料的模板。每個table必須至少有一個row type,您可以根據需求定義額外的row type。您可以用row type區分table中的不同內容。比如您可能在內容行上、標題和註腳上使用不同的型別。當您為介面控制器場景新增table時,Xcode會自動建立初始的row types供您配置。

為table新增row  types:

  • 在storyboard檔案中選中table物件
  • 開啟Attributes inspector.
  • 使用Rows屬性更改可用row type數量。

每個row type最初都包含一個單個組元素。您可以為該組元素新增標籤、圖片以及其他所需物件。標籤和圖片的真實內容通常是無關緊要的。在執行時,作為配置工作的一部分,您可以替換介面物件的內容。

想要在執行時管理表格行的內容,您需要提供一個自定義的row controller 類。大部分row controller類包含少量程式碼,或者根本就不包含程式碼,它們主要用來訪問那些包含介面物件的outlets。不過,如果您在表格行中新增了按鈕或者其他控制元件,那麼其類也會包含一些動作方法,以響應使用者與控制元件的互動。

為row type定義一個row controller類:

  • 為WatchKit擴充套件新增一個新的Cocoa Touch類
  • 讓新類繼承NSObject
  • 為每個計劃在執行時訪問的標籤、圖片或者控制元件新增宣告的屬性。宣告屬性可使用以下格式,請更改類以匹配相應的介面物件:

Listing 10-1 展示了一個用於管理row type的示例類

您可以在storyboard檔案中完成row type配置。配置表格行要求設定其類,並將任何outlets連線到對應的介面物件上。您還必須提供一個方法,以便通過命名row type在執行時辨別表格行。

在storyboard中配置row type:

  • 在storyboard檔案中選中row controller物件。
  • 將row controller的Identifier屬性設定為唯一值,隨後您會在建立表格行時使用該識別符號。

在行型別中該值必須是唯一的,但是實際值還是由您來定奪。在Attributes inspector中設定該值。

  • 將row type的類設定為您的自定義類。您需要在Identity inspector中設定類資訊。

將row type元素和類中對應的outlets連線起來。

  • 將storyboard檔案中的專案和outlets連線並繫結。當您在程式碼中配置table時,WatchKit會在執行時使用該資訊例項化對應的類。

Figure 10-1 在Xcode中配置一個命名為”Main Row Type”的row type,並設定為使用Listing 10-1中定義的MainRowType類。該類中的rowDescription 和rowIcon outlets被連線到行中的圖片和標籤。

1418720785829419

執行時配置table內容

在執行時,您可以為table新增表格行並以程式設計形式配置其內容。通常,新增並配置表格行是初始化介面控制器過程中的一部分。

建立並配置列表行

  • 先決定你需要建立的行的數目和型別,這取決於你想要展示的資料型別。
  • 使用setRowTypes:或者setNumberOfRaws:withRowType:方法來建立。這兩個方法都會在介面上建立新的列表行,並且會在WatchKit擴充套件中例項化對應的類。這些例項被儲存在table中,且可通過rowControllerAtIndex:方法訪問。
  • 使用rowControllerAtIndex:方法遍歷表格中的每一行。
  • 使用row controller物件來配置每一行中的內容。

setRowType:和setNumberOfRaws:withRowType:方法例項化與storyboard檔案中對應的行型別相關的類。在呼叫這些方法之後,緊接著就可以直接獲取最新建立的row controller物件了,當然還可以通過這些物件來設定內容。下面的Listing 10-2這段程式碼則是一個能建立新行並對其進行配置的簡單示例。在這個例子裡,使用的是在程式碼Listing 10-1中定義的MainRowType類,以及自定義的MyDataObject類,MyDataObject類用於提供table中用於行內容的資料。在setNumberOfRaws:withRowType:方法中設定好資料物件之後,程式碼會遍歷該物件,並使用它們配置表格中每一行的內容。

Listing 10-2 建立並配置table中的行

表格行的選中處理

介面控制器負責處理table中的行選中操作。當使用者點選table中的某一行,WatchKit會選中該行並呼叫WatchKit擴充套件中正確的方法。您可以在以下地方處理表格行的選中操作:

您可以使用以上兩者之一來處理行選中事件。如果您的介面控制器有多個table,那推薦使用一個動作方法,因為您無需判定操作跟哪個table有關。如果您使用了一個動作方法,那需要遵循下面的語法:

通過選中表格行來執行app相關的任何操作,比如跳轉新介面,或者更新行中顯示的內容。如果您不希望使用者選中表格行,可以在Storyboard中禁用相應的row controller的Selectable選項。

相關文章