фонкакао NSPopUpButtonCell не отображает выбранное значение
У меня есть NSTableView с 3-мя колоннами, одна из них имеет NSPopUpButtonCell.
У меня не получилось использовать привязки данных для заполнения данных ячеек, поэтому я теперь пытаюсь использовать новый подход, задавая значения программным путем с помощью addItemsWithTitles.
Хотя этот подход сработал для загрузки значений, он не отображает выбранный по умолчанию (я в порядке с индексом 0 моего массива), а также не отображает любой элемент, который я выбираю во всплывающем окне.
Bindings Выпуск
В Документации предлагает использовать привязки и представляет собой пример с использованием основных данных для загрузки реляционных данных во всплывающем окне. Хотя мое приложение настроено по-другому, я все же пытался использовать контроллер массива, но это не заполнило бы данные в popUpButtoncell.
Моя структура данных - это простой объект класса, без данных ядра, и это выглядит так.
class Display: NSObject {
var name: String
var resolution: String
var availableResolutions: [String]
}
Я бы хотел использовать массив доступных массивов, чтобы заполнить выпадающий список.
Каждая строка в моей таблице представляет экземпляр объекта Display. Я хочу, чтобы NSPopUpButtonCell отображал элементы в этом конкретном списке доступных доступных Решений. Я не уверен, возможно ли иметь динамический список для каждой строки Display.
То, что я пытался
Я создал IBOutlet для моего NSPopUpButtonCell и я ссылаться на него в objectValueForTableColumn и setObjectValue. Я добавляю массив доступныхResultions внутри objectValueForTableColumn.
@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 вызываются? Разве это не для табличных таблиц? У вас, скорее всего, есть табличное представление на основе представления. – user965972
Режим содержимого настроен для Cell Based. Я могу подтвердить, что objectValueForTableColumn вызывается, поскольку данные для других столбцов фактически заполнены.Кроме того, вызывается setObjectValue и работает, если я изменяю какие-либо данные в таблице. –