2011-11-09 22 views
0

填充NSPopUpButtonCell有道比方說,一個人有很多汽車,他們有一個最喜愛的汽車。我似乎不能在它描述來填充NSPopUpButtonCell在tableview中,不同的每一行的正確方法的文檔找到。使用NSTableViewDataSource

例如,我會1排的每個人,最喜歡的車列將有一個NSPopUpButtonCell在裏面。每行有不同的菜單項。第1行(卡瑪洛,騎士,F150)行2(745li,卡瑪洛,林肯轎車)等等

+0

你看着綁定? – jrturton

+0

是的,我使用綁定。有大量數據時,我更喜歡手動數據源。 – joels

+0

我也嘗試保存每行的菜單數組。通過這種方式,我不必每次爲單元格設置菜單時重新創建每行的菜單。它仍然看起來很慢。 – joels

回答

1

從NSTableColumn.h文件

允許每行定製用於該小區NSTableColumn。 NSTableView將在繪製'row'時調用 - [tableColumn dataCellForRow:]。默認情況下,這只是調用-dataCell。子類可以覆蓋-dataCellForRow:如果他們需要爲不同的行使用不同的單元格。在Leopard和越高,NSTableView的委託方法-tableView:dataCellForTableColumn:行:可作爲一個便於學習,以避免子類NSTableColumn。在這兩種情況下,返回的單元格都應該正確實現-copyWithZone :,因爲NSTableView可能會複製這些單元格。

表會向數據源在popupcell將selectedIndex,然後它會要求委託的菜單項。我有我的委託和數據源相同的對象,讓我們稱之爲tableViewController。

當tableViewController在objectValueForTableColumn :(數據源方法)中提供selectedIndex時,菜單中沒有所有菜單時間,所以我必須調用dataCellForRow以獲取所選菜單和索引項目在菜單中。
tableViewController實現了dataCellForRow:它創建一個新的NSPopUpButtonCell並用菜單項填充它。

它的工作原理,但似乎令人費解。