メソッドは、どの項目が開いているか、または閉じているかを調べるために呼び出されます。このため、ビューは項目の開閉について管理しておかなければなりません。ツリーはコンテナの開閉状態を知るために、このメソッドを呼び出します。呼び出しを行わないことを補足しておきます。コンテナは、コンテナでない行とは異なった表示をされます。コンテナにはフォルダを表すアイコンが横に表示されます。項目のスタイル付けを行うために、スタイルシートを利用することも可能です。これによって、行の開閉状態など、いくつかのプロパティに応じたスタイルを設定することができます。これについては、後のセクションで述べます。空のコンテナにはツイスティは表示されませんが、コンテナとして扱われます。メソッドを呼び出します。ツリーに表示の更新を要求します。メソッドのまとめ階層ビューを実装するために必要なメソッドを以下にまとめます。後続行の有無を調べるとき、最適化のために、その位置以降から調べれば済むように渡されます。行にいくつかの子行があって、それらにさらに子行があり、いくつかは開いている様な状況を想像してみてください。このような場合、ビューの実装によっては次の隣接行のインデックスの算出に時間がかかるかもしれません。隣接行があるとすれば、どこに存在するかを知っている場合があるため、ビュー側の最適化をサポートするために、その値を渡してくれます。階層カスタムビューの例それでは、ここまでに説明したことをまとめて簡単な例を作成してみましょう。配列に格納されたデータからツリーを構築してみることにします。追加のレベルをサポートするように拡張することもそれほど困難ではありません。大きな例なので、部分単位で順番に確認していくことにします。要素にデータを何も含まない単純なものを使用します。関数が呼び出されます。プロパティに、treeViewの名前で作成されるカスタムビューを設定します。このカスタムツリービューには、多くのメソッドを実装する必要があります。このうち、重要なものについては個別に見ていくことにします。つのデータ構造を定義します。(visible)になっている項目の配列を保持するものです。カスタムビューは、どの項目が表示状態にあるかを管理しなければならないことに留意してください。つの親ノードについて、それぞれに対応する子の配列を保持しています。つのトップレベルの親項目のみが表示されるように初期化されています。この配列には、項目の開閉に応じて項目の追加と削除が行われることになります。挿入することになります。つの真偽値は、順に行がコンテナであるかどうかと開かれているかどうかを表します。設定することになります。続いて、ツリービューのインターフェイスを実装する必要があります。単純なものをまとめて示します。これは全行数ではなく、そのとき表示状態になっている行数を返す必要があることに注意してください。項目を数えてはいけません。関数は、ビューにツリーのボックスオブジェクトを設定するために呼び出されます。ツリー特有の仕様に対応するために拡張された、ツリー専用のボックスオブジェクトです。これについての詳細は、次のセクションで説明する予定ですが、主にツリーの描画を補助するために使用されます。対応する値を返すだけです。返すように実装しなければなりません。指定された行の親を探す必要があります。それ以外の場合は、行を逆方向に走査してコンテナであるものを探し出します。「トップレベルにはコンテナのみが置かれている」ことを前提にして単純に実装しています。なる可能性もあり、複雑な実装が必要になってきます。