2009-05-26 11 views
16

これは私が長い間探してきたようで、私の問題に大きな簡単で答えが見つからないようです。カスタムセルを持つNSTableView

私はCocoa/ObjCでXCodeを使用しており、NSDictionary/Arrayの値をセルの異なるセクションに読み込むNSTableViewを作成しようとしています。

たとえば、NSImage、NSTextFieldなどのアイテムをカスタムセルに追加しようとしています(背景イメージとともに)。しかし、私はこれを作成するための簡単な答えを見つけることができません..

私はiPhone用のコードをしばらくの間UITableViewsしているとNSTableViewsと同様の方法を見つけるように見えることはできません。

どのようなヘルプが本当に素晴らしいでしょう!

おかげ

ドミニク

+0

私の[視覚的アプローチ](http://stackoverflow.com/questions/5884265/how-to-setup-a-nstableview-with-a-custom-cell-using-a-subview)(まだいくつかレンダリングの問題) – JJD

答えて

26

NSTableViewは-tableView:dataCellForTableColumn:row:を持っています。デリゲートにNSCellサブクラスを作成し、その行のカスタマイズが必要な場合は、それを返します。テーブルビューの各行にカスタムセルを使用するだけの場合は、IBを使用してカスタムセルクラスを設定することもできます。

テーブルビューは必要に応じてセルをコピーするので、より効率的な場合はセルをインスタンス変数として保持できます。テーブルビューのデータソースメソッドまたはバインディングは、通常どおりに機能します.1つの文字列または数値ではなく、入力した辞書のみを返します。カスタムモデルオブジェクトをテーブルビューに直接渡すこともできますが、コピー可能にするか、セル内でsetObjectValue:をオーバーライドしてNSValueにラップする必要があります。

NSCellをサブクラス化することで問題が発生する場合は、少しの学習経験になる可能性があります。 -drawWithFrame:inView:から始めて、すべてのカスタムオブジェクトを描画し、より多くの機能が必要な場合はそこから移動します。

+1

情報ありがとう! NSCellに関するドキュメントはほとんど見つかりませんでした。 –

+3

インスタンス変数を持つカスタムセルを設計する場合は、 "copyWithZone:"のようにいくつかのメソッドを実装しなければならないため、ドキュメントを注意深く読んでください。 –

+0

私はカスタムNSCellサブクラスで '-setObjectValue:'を実装し、 '-tableView:objectValueForTableColumn:row:'で正しいセルのオブジェクト値を返すだけです。 – 11684

3

セルには、一度に1つのオブジェクト値しか保持できません。イメージと文字列/属性文字列を持つモデルオブジェクトをプロパティとして作成し、それをテーブルビューに取り込みます。

また、テキストフィールドはビューです。あなたのモデルはプレゼンテーションの何も知らないはずです。それはあなたの意見です。

7

ウォッチWWDC 2011のビデオ "高度にビューベースNSTableView基本"(セッション120)

https://developer.apple.com/videos/wwdc/2011/

これは、ライオン(10.7)に適用され、より高いです。