我有一個NSTableView 3列,它們中的一個具有一NSPopUpButtonCell。
我一直在使用數據綁定填充單元格數據不成功,因此我現在試圖通過使用addItemsWithTitles以編程方式設置值來嘗試新方法。
雖然這種方法已經加載了值,但它沒有顯示選中的默認值(我可以使用我的數組中的索引0)並且它也無法顯示我在彈出窗口中選擇的任何項目。
綁定問題
的單證建議使用綁定和提供使用核心數據在彈出加載關係數據的例子。儘管我的應用程序設置不同,但我仍然嘗試使用數組控制器,但這不會填充popUpButtoncell中的數據。
我的數據結構是一個簡單的類對象,沒有核心數據,它看起來像這樣。
class Display: NSObject {
var name: String
var resolution: String
var availableResolutions: [String]
}
我想使用availableResolutions數組填充下拉列表。
我的表中的每一行都代表Display對象的一個實例。我希望NSPopUpButtonCell在可用分辨率的特定顯示列表中顯示項目。我不確定是否有可能爲每個Display行設置一個動態列表。
我已經試過
我創建一個IBOutlet我NSPopUpButtonCell,我引用它在objectValueForTableColumn和setObjectValue。我在objectValueForTableColumn中添加availableResultions數組。
@IBOutlet weak var popUpCell: NSPopUpButtonCell!
func numberOfRowsInTableView(tableView: NSTableView) -> Int {
return self.displays.count
}
func tableView(tableView: NSTableView, objectValueForTableColumn tableColumn: NSTableColumn?, row: Int) -> AnyObject? {
let display = displays[row]
if tableColumn!.identifier == "displayCell" {
return display.name
}
else if tableColumn!.identifier == "resolutionCell" {
return display.resolution
}
else {
self.popUpCell.addItemsWithTitles(display.availableResolutions!)
return display.availableResolutions
}
}
func tableView(tableView: NSTableView, setObjectValue object: AnyObject?, forTableColumn tableColumn: NSTableColumn?, row: Int) {
if tableColumn!.identifier == "displayCell" {
displays[row].name = object as! String
}
else if tableColumn!.identifier == "resolutionCell" {
object as! String
}
else {
let index = object as! Int
if index >= 0 {
self.popUpCell.selectItemAtIndex(index)
self.popUpCell.synchronizeTitleAndSelectedItem()
}
}
}
我在想什麼?
你確定調用了objectValueForTableColumn和setObjectValue嗎?這些不是基於單元的tableviews嗎?您最有可能擁有基於視圖的表格視圖。 – user965972
內容模式設置爲基於單元格。我可以確認objectValueForTableColumn被調用,因爲其他列的數據實際上已被填充。此外,setObjectValue被調用,如果我修改表中的任何數據,則工作。 –