Xcode 3 がビルド構成に使用しているようなアウトライン ビューをどのように実装するのか疑問に思っています。
NSOutlineView/NSTableView をバインドおよび NSTreeController/NSArrayController と共に使用する場合、明らかな理由により、ビューの列は個々のセルではなく に割り当てられたバインドを取得します。列のすべての行が同じセルを使用している場合は、簡単です。ただし、すべての行が (潜在的に) 独自のセル型を使用している場合(そして、潜在的に独自のバインディングのコレクションを使用している場合) は、おかしなことになります。
スクリーンショットを見ると、テキスト フィールド セルに必要な「値」のバインドが 1 つだけであることがはっきりとわかります。ポップアップ ボタン セルには、「content」に少なくとも 1 つ、「contentValues 」に 1 つ、最後に「 selectedIndex / selectedObject / selectedValue 」に少なくとも 1 つのバインディングが必要です。チェックボックスのセルには、" value " と (おそらく) " title "のバインドが必要です。
できるだけきれいな (そして少ない) コードでこれを達成するにはどうすればよいでしょうか?
(または、次のように尋ねられるかもしれません: Apple はどのようにそれを行ったでしょうか?)
…
[ outlineView :dataCellForTableColumn:item:]
を
介して適切な (コピーされた) セルを提供し、それらを個々のデータ モデル ([item presentedObject] から) にバインドします。アウトライン ビューに表示されるデータの正確な量 (< 500 行) を知っているので、行ごとに 1 つのセルを使用しても、メモリの問題は大きくないはずです。バインディングを介して適切に表示されるデータを取得しました(イェーイ!) が、それらの値を変更することはできません。O_o どうやら、値の変更がデータ モデルに到達することはありません。単純な[checkboxCell bind:@"value" toObject:rowModel withKeyPath:@"value" options:nil]以上のものはありますか? (これは取得するのに十分なようです値を設定しますが、それに応じて設定するためのものではありません)。
このトピックに関する情報は見つかりませんでした。カスタムセルを列ごとに使用するための情報とヒントはたくさんありますが、「行ごと」に使用するためのものはありません。:(
これは、Cocoa チュートリアルの素晴らしい内容になると思いませんか? ;)