元のドキュメント: developer.apple.com/documentation/watchkit/wkinterfacetable


クラス


WKInterfaceTable


単一列の表のインターフェイスのコンテンツを作成および管理するオブジェクト。


watchOS 2.0+

class WKInterfaceTable




以下で言及


シーン間の移動

概観


表のオブジェクトを使用して、行の数と種類を設定し、それらの行に対応するデータオブジェクトを構成します。表のオブジェクトを構成し、データを格納するには、以下の手順を実行してください。


  1. ストーリーボードで、1 つ以上の行コントローラタイプを定義します。

  2. 各行タイプの内容を管理するためのカスタムデータクラスを定義します。

  3. 実行時に何行(およびどのタイプ)の行を表示するかを、表のオブジェクトに告知します。

  4. カスタムデータクラスのインスタンスを使用して、各行の内容を構成します。

このクラスを直接サブクラス化したり、インスタンス化したりしないでください。代わりに、インターフェイスコントローラクラスでアウトレットを定義し、それらをストーリーボードファイル内の対応するオブジェクトに接続します。例えば、インターフェイス内の表のオブジェクトを参照するには、インターフェイスコントローラクラスで以下の構文を使用してプロパティを定義して下さい。


SwiftObjective-C

@IBOutlet weak var myTable: WKInterfaceTable!!

@property (weak, nonatomic) IBOutlet WKInterfaceTable* myTable;

インターフェイスコントローラの初期化中、WatchKit はこのクラスの新しいインスタンスを作成し、それをあなたのアウトレットに割り当てます。その時点で、アウトレット内のオブジェクトを使用して表を変更することができます。


あなたの表の行を定義する


あなたのストーリーボードに表のオブジェクトを追加したら、その表に付属する行のコントローラを構成します。行のコントローラは、特定の種類の行の見た目を定義するものです。表には最初から 1 種類の行のタイプが用意されていますが、後から追加することも可能です。表内の各行のコントローラが実行時に機能するためには、最低限の構成を行う必要があります。


  • 各行コントローラには名前がなければなりません。この名前は、属性インスペクタの Identifier プロパティを使用して設定します。この名前は、後でそのタイプの行を作成する際に使用します。

  • 各行コントローラには、関連クラスがなければなりません。これは Identity インスペクタで設定します。実行時には、表内の各行に対して、行コントローラクラスのインスタンスが表によって作成されます。

  • 行コントローラのコンテンツを構成するには、ライブラリから要素をドラッグし、その行のグループにドロップします。ほとんどの行では、グループオブジェクトを最上位のオブジェクトとして使用します。また、グループオブジェクトを入れ子にすることで、インターフェイスオブジェクトを垂直方向や水平方向に配置することも可能です。そのグループに、行のコンテンツを表示するために必要なオブジェクトを追加してください。


    各行コントローラーには、実行時にその行のコンテンツを管理するためのクラスが必要です。このクラスはコード内でその行の代理(プロキシ)として機能し、行のコンテンツを構成するために必要なアウトレットを保持します。


    SwiftObjective-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:) メソッドを通じてそれらを利用できるようにします。このメソッドを使用して各行コントローラオブジェクトを取得し、行のコンテンツを構成してください。


    SwiftObjective-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:) メソッドを実装することで、表の行のタップに明示的に応答することもできます。このメソッドを使用して、別のインターフェースコントローラを表示したり、その他の関連タスクを実行したりできます。


    注意


    スイッチ、スライダー、ボタンなどのコントロールを含む行コントローラは、それらのコントロールの操作に応答するためにアクションメソッドを使用しなければなりません。システムは、コントロール内のタップをインターフェースコントローラの table(_:didSelectRowAt:) メソッドに渡しません。


    項目のページ化のサポート


    項目のページ化機能を使用すると、項目のリストを簡単にナビゲートできます。ユーザーが表から項目を選択すると、アプリはその項目の詳細ビューを表示します。その後、ユーザーは上下にスクロールして、その表内の他の関連項目間をナビゲートできます。たとえば、ユーザーが株式アプリで銘柄コードを選択すると、その銘柄の詳細がロードされます。その後、ユーザーは垂直方向にスクロールして他の銘柄に移動できます。


    項目のページ化はデフォルトでは無効になっています。有効にするには、以下の手順を実行してください。


    1. ストーリーボードで、属性インスペクタで表の「項目ページ化オプション (Item Pagination option)」を有効にします。

    2. ストーリーボードで、表のすべての行コントローラにセグエを定義します。表のナビゲーションはセグエを使用して制御しなければなりません。

    3. 表の項目をプログラムでナビゲートする場合(たとえば、コンプリケーションから特定のインターフェイスコントローラを起動する場合)、インターフェイスコントローラの pushController(withName:context:) メソッドではなく、表の performSegue(forRow:) メソッドを使用してください。performSegue(forRow:) メソッドは、どの表のどの行がセグエを開始したかを watchOS に知らせます。システムはこの情報を使用して、ユーザーがスクロールしたときに適切な関連項目を提供します。

    4. 表の属性を構成する


      Xcode では、ストーリーボードファイル内であなたの表インターフェイスオブジェクトに関する情報を構成できます。以下の表は、ストーリーボードで構成可能な属性とその意味を示しています。


      属性説明
      行数表がサポートする行コントローラの数。この値を変更すると、ストーリーボードファイルに新しい行コントローラオブジェクトを追加または削除できます。
      間隔行間の間隔の量(ポイント単位)。
      背景画像表の項目の背後に表示すべき背景画像。基となるインターフェースコントローラの背景色や画像を表示させたい場合は、画像を指定しないでください。
      表の背景色。背景色や基となるインターフェースコントローラの画像を表示させたい場合は、色を「透明」に設定してください。
      項目ページ化項目ページ化を有効にするチェックボックス。項目ページ化の詳細については、項目のページ化のサポート を参照してください。

      表内の各行コントローラーについて、以下の表は構成可能な属性とその意味を示しています。


      属性説明
      識別子setRowTypes(_:) メソッドまたは setNumberOfRows(_:withRowType:) メソッドにおいて、行コントローラのタイプを識別するために使用される名前。
      選択可能表が行内のタップに反応するかどうかを示すチェックボックス。無効にすると、行をタップしても行はハイライト表示されず、表にアクションが報告されません。




      トピックス


      行のタイプを指定


      func setRowTypes([String])

      表にデータを読み込む際に使用する行コントローラーを作成します。


      func setNumberOfRows(Int, withRowType: String)

      表にデータを読み込む際に使用する、指定された数の(同じタイプの)行コントローラーを作成します。



      行コントローラーの取得


      var numberOfRows: Int

      取得可能な行コントローラーの数。


      func rowController(at: Int) -> Any?

      表内の指定されたインデックスにある行の行コントローラーを返します。



      行の挿入と削除


      func insertRows(at: IndexSet, withRowType: String)

      指定されたインデックス位置の表に、行を挿入します。


      func removeRows(at: IndexSet)

      指定された行を表から削除します。



      スクロール


      func scrollToRow(at: Int)

      指定されたインデックスの行が表示されるようにスクロールします。


      var curvesAtBottom: Bool

      画面下部の角の丸みに合わせて行を縮小するかどうかを決定するブール値。


      var curvesAtTop: Bool

      画面上部の角の丸みに合わせて行を縮小するかどうかを決定するブール値。



      セグエの実行


      func performSegue(forRow: Int)

      指定された行のセグエを実行します。





      関連


      以下からの継承


      WKInterfaceObject


      以下に準拠


      CVarArg

      CustomDebugStringConvertible

      CustomStringConvertible

      Equatable

      Hashable

      NSObjectProtocol





      以下も見よ


      コンテナ


      class WKInterfaceGroup

      1 つ以上のインターフェースオブジェクトを格納するコンテナ。


      class WKInterfaceSeparator

      グループ内に視覚的な区切り線を表示するインターフェイスオブジェクト。


      class WKInterfacePicker

      ユーザーが選択できる項目のスクロールリストを表示するインターフェース要素。














      トップへ












      トップへ












      トップへ












      トップへ












      トップへ












      トップへ












      トップへ












      トップへ












      トップへ












      トップへ












      トップへ












      トップへ












      トップへ












      トップへ












      トップへ












      トップへ












      トップへ