XCode 26.6 日本語化計画
元のドキュメント: developer.apple.com/documentation/watchkit/wkinterfacetable
単一列の表のインターフェイスのコンテンツを作成および管理するオブジェクト。
class WKInterfaceTable
表のオブジェクトを使用して、行の数と種類を設定し、それらの行に対応するデータオブジェクトを構成します。表のオブジェクトを構成し、データを格納するには、以下の手順を実行してください。
このクラスを直接サブクラス化したり、インスタンス化したりしないでください。代わりに、インターフェイスコントローラクラスでアウトレットを定義し、それらをストーリーボードファイル内の対応するオブジェクトに接続します。例えば、インターフェイス内の表のオブジェクトを参照するには、インターフェイスコントローラクラスで以下の構文を使用してプロパティを定義して下さい。
| Swift | Objective-C |
@IBOutlet weak var myTable: WKInterfaceTable!!
@property (weak, nonatomic) IBOutlet WKInterfaceTable* myTable;
インターフェイスコントローラの初期化中、WatchKit はこのクラスの新しいインスタンスを作成し、それをあなたのアウトレットに割り当てます。その時点で、アウトレット内のオブジェクトを使用して表を変更することができます。
あなたのストーリーボードに表のオブジェクトを追加したら、その表に付属する行のコントローラを構成します。行のコントローラは、特定の種類の行の見た目を定義するものです。表には最初から 1 種類の行のタイプが用意されていますが、後から追加することも可能です。表内の各行のコントローラが実行時に機能するためには、最低限の構成を行う必要があります。
行コントローラのコンテンツを構成するには、ライブラリから要素をドラッグし、その行のグループにドロップします。ほとんどの行では、グループオブジェクトを最上位のオブジェクトとして使用します。また、グループオブジェクトを入れ子にすることで、インターフェイスオブジェクトを垂直方向や水平方向に配置することも可能です。そのグループに、行のコンテンツを表示するために必要なオブジェクトを追加してください。

各行コントローラーには、実行時にその行のコンテンツを管理するためのクラスが必要です。このクラスはコード内でその行の代理(プロキシ)として機能し、行のコンテンツを構成するために必要なアウトレットを保持します。
| Swift | Objective-C |
class MyRowController: NSObject {
@IBOutlet weak var itemLabel: WKInterfaceLabel!
@IBOutlet weak var itemImage: WKInterfaceImage!
}
@interface MyRowController : NSObject @property (weak, nonatomic) IBOutlet WKInterfaceLabel* itemLabel; @property (weak, nonatomic) IBOutlet WKInterfaceImage* itemImage; @end
表のインターフェイスオブジェクトにデータを設定するには、setRowTypes(_:) または setNumberOfRows(_:withRowType:) メソッドを使用します。これらのメソッドは、表に追加する行のタイプ(および数)を指定するものです。すべての行が同じタイプである場合は、setNumberOfRows(_:withRowType:) メソッドを使用します。表内で複数の行コントローラを使用する場合は、setRowTypes(_:) メソッドを使用します。この行タイプの文字列は、ストーリーボード内の該当する行コントローラの Identifier プロパティに入力した名前と対応しています。
表に行を追加すると、WatchKit は Watch アプリ内にその行を作成し、WatchKit 拡張機能内でそれらの行に対応するクラスをインスタンス化します。表オブジェクトは、新たにインスタンス化されたクラスを内部的に保持し、rowController(at:) メソッドを通じてそれらを利用できるようにします。このメソッドを使用して各行コントローラオブジェクトを取得し、行のコンテンツを構成してください。
| Swift | Objective-C |
func loadTodoItems() {
// Fetch the to-do items
let items = myFetchToDoList()
// Configure the table object and get the row controllers.
myTable.setNumberOfRows(items.count, withRowType: "MainRowType")
// Iterate over the rows and set the label and image for each one.
for (index, item) in items.enumerated() {
let row = myTable.rowController(at: index) as! MyRowController
row.itemImage.setImage(item.image)
row.itemLabel.setText(item.title)
}
}
- (void)loadTodoItems {
// Fetch the to-do items
NSArray<Item*>* items = [self fetchTodoList];
// Configure the table object and get the row controllers.
NSInteger rowCount = items.count;
[self.myTable setNumberOfRows:rowCount withRowType:@"MainRowType"];
// Iterate over the rows and set the label and image for each one.
for (NSInteger i = 0; i < rowCount; i++) {
// Set the values for the row controller
MyRowController* row = [self.myTable rowControllerAtIndex:i];
[row.itemImage setImage:items[i].image];
[row.itemLabel setText:items[i].title];
}
}
この例では、表は行のデータを取得し、表の setNumberOfRows(_:withRowType:) メソッドを呼び出して行を作成します。その後、新しく作成された行のコントローラオブジェクトを反復処理し、それぞれのラベルに To-Do アイテムのテキストを設定します。
表の内容を更新したい場合は、新しい行タイプの情報を指定して、setRowTypes(_:) または setNumberOfRows(_:withRowType:) メソッドを再度呼び出します。これらのメソッドを再度呼び出すと、表は古い行を破棄して新しい行を作成します。古い行を削除せずに新しい行を挿入するには、insertRows(at:withRowType:) メソッドを使用します。
ストーリーボード内で、行コントローラと宛先インターフェースコントローラ間のセグエを作成します。ユーザーがそのタイプの行をタップすると、システムは自動的に宛先インターフェースコントローラを画面にプッシュします。宛先コントローラにデータを渡すには、現在のインターフェースコントローラの contextForSegue(withIdentifier:in:rowIndex:) メソッドをオーバーライドし、選択された行に基づいてコンテキストデータを返します。
あるいは、インターフェースコントローラの table(_:didSelectRowAt:) メソッドを実装することで、表の行のタップに明示的に応答することもできます。このメソッドを使用して、別のインターフェースコントローラを表示したり、その他の関連タスクを実行したりできます。
項目のページ化機能を使用すると、項目のリストを簡単にナビゲートできます。ユーザーが表から項目を選択すると、アプリはその項目の詳細ビューを表示します。その後、ユーザーは上下にスクロールして、その表内の他の関連項目間をナビゲートできます。たとえば、ユーザーが株式アプリで銘柄コードを選択すると、その銘柄の詳細がロードされます。その後、ユーザーは垂直方向にスクロールして他の銘柄に移動できます。
項目のページ化はデフォルトでは無効になっています。有効にするには、以下の手順を実行してください。
Xcode では、ストーリーボードファイル内であなたの表インターフェイスオブジェクトに関する情報を構成できます。以下の表は、ストーリーボードで構成可能な属性とその意味を示しています。
| 属性 | 説明 |
| 行数 | 表がサポートする行コントローラの数。この値を変更すると、ストーリーボードファイルに新しい行コントローラオブジェクトを追加または削除できます。 |
| 間隔 | 行間の間隔の量(ポイント単位)。 |
| 背景画像 | 表の項目の背後に表示すべき背景画像。基となるインターフェースコントローラの背景色や画像を表示させたい場合は、画像を指定しないでください。 |
| 色 | 表の背景色。背景色や基となるインターフェースコントローラの画像を表示させたい場合は、色を「透明」に設定してください。 |
| 項目ページ化 | 項目ページ化を有効にするチェックボックス。項目ページ化の詳細については、項目のページ化のサポート を参照してください。 |
表内の各行コントローラーについて、以下の表は構成可能な属性とその意味を示しています。
| 属性 | 説明 |
| 識別子 | setRowTypes(_:) メソッドまたは setNumberOfRows(_:withRowType:) メソッドにおいて、行コントローラのタイプを識別するために使用される名前。 |
| 選択可能 | 表が行内のタップに反応するかどうかを示すチェックボックス。無効にすると、行をタップしても行はハイライト表示されず、表にアクションが報告されません。 |
表にデータを読み込む際に使用する行コントローラーを作成します。
func setNumberOfRows(Int, withRowType: String)
表にデータを読み込む際に使用する、指定された数の(同じタイプの)行コントローラーを作成します。
取得可能な行コントローラーの数。
func rowController(at: Int) -> Any?
表内の指定されたインデックスにある行の行コントローラーを返します。
func insertRows(at: IndexSet, withRowType: String)
指定されたインデックス位置の表に、行を挿入します。
指定された行を表から削除します。
指定されたインデックスの行が表示されるようにスクロールします。
画面下部の角の丸みに合わせて行を縮小するかどうかを決定するブール値。
画面上部の角の丸みに合わせて行を縮小するかどうかを決定するブール値。
func performSegue(forRow: Int)
指定された行のセグエを実行します。
NSObjectProtocol
class WKInterfaceGroup
1 つ以上のインターフェースオブジェクトを格納するコンテナ。
class WKInterfaceSeparator
グループ内に視覚的な区切り線を表示するインターフェイスオブジェクト。
class WKInterfacePicker
ユーザーが選択できる項目のスクロールリストを表示するインターフェース要素。