をファイルには、このために使用されるセルの行単位のカスタマイズが可能NSTableColumn。 NSTableViewは 'row'を描画するときに - [tableColumn dataCellForRow:]を呼び出します。デフォルトでは、これは単に-dataCellを呼び出します。サブクラスは、異なる行に異なるセルを使用する必要がある場合は、-dataCellForRow:をオーバーライドできます。 Leopard以上では、NSTableViewデリゲートメソッド-tableView:dataCellForTableColumn:row:をNSTableColumnのサブクラス化を回避するための喜びとして使用できます。どちらの場合でも、NSTableViewはセルのコピーを作成する可能性があるため、返されるセルは-copyWithZone:を正しく実装する必要があります。
テーブルは、ポップアップセルでselectedIndexのデータソースを尋ねると、デリゲートにメニュー項目を要求します。私は、私の代理人とデータソースを同じオブジェクトと呼び、それをtableViewControllerと呼ぶことができます。
tableViewControllerがobjectValueForTableColumn :(データソースメソッド)でselectedIndexを提供しているとき、そのメニューにすべてのメニュー時間が含まれていないため、dataCellForRowを呼び出して選択したメニューおよびインデックスを取得する必要がありますメニューの項目をクリックします。
tableViewControllerはdataCellForRow:を実装し、新しいNSPopUpButtonCellを作成し、それにメニューアイテムを設定します。
これは機能しますが、複雑です。
バインディングを見ましたか? – jrturton
ええ、バインディングを使用しています。私は、多くのデータがある場合、手動のデータソースを好む。 – joels
私はまた、各行のメニューの配列を保存しようとしました。この方法では、セルのメニューを設定するたびに、各行のメニューを再作成する必要はありません。それでもまだ遅いです。 – joels