人が多くの車を持っていて、お気に入りの車を持っているとしましょう。行ごとに異なるテーブルビューに NSPopUpButtonCell を設定する正しい方法を説明しているドキュメントを見つけることができないようです。
たとえば、各人に 1 つの行があり、お気に入りの車の列には NSPopUpButtonCell があります。各行には異なるメニュー項目があります。1列目(カマロ、キャバリエ、F150) 2列目(745li、カマロ、タウンカー) etc...
人が多くの車を持っていて、お気に入りの車を持っているとしましょう。行ごとに異なるテーブルビューに NSPopUpButtonCell を設定する正しい方法を説明しているドキュメントを見つけることができないようです。
たとえば、各人に 1 つの行があり、お気に入りの車の列には NSPopUpButtonCell があります。各行には異なるメニュー項目があります。1列目(カマロ、キャバリエ、F150) 2列目(745li、カマロ、タウンカー) etc...
NSTableColumn.h ファイルから
この NSTableColumn に使用されるセルの行ごとのカスタマイズを許可します。NSTableView は、「行」を描画するときに -[tableColumn dataCellForRow:] を呼び出します。デフォルトでは、これは単に -dataCell を呼び出します。サブクラスは、行ごとに異なるセルを潜在的に使用する必要がある場合、 -dataCellForRow: をオーバーライドできます。Leopard 以降では、NSTableView デリゲート メソッド -tableView:dataCellForTableColumn:row: を便利な手段として使用して、NSTableColumn のサブクラス化を回避できます。どちらの場合も、NSTableView がセルのコピーを作成する可能性があるため、返されるセルは -copyWithZone: を適切に実装する必要があります。
テーブルはデータ ソースに popupcell の selectedIndex を要求し、デリゲートにメニュー項目を要求します。デリゲートとデータソースを同じオブジェクトにしました。それを tableViewController と呼びましょう。
tableViewController が objectValueForTableColumn: (データソース メソッド) で selectedIndex を提供している場合、メニューにすべてのメニュー時間が含まれているわけではないため、dataCellForRow を呼び出して、メニューとメニューで選択された項目のインデックスを取得する必要があります。 .
tableViewController は dataCellForRow: を実装します。これは、新しい NSPopUpButtonCell を作成し、それにメニュー項目を入力します。
それは機能しますが、複雑に見えます。