2016-08-28 2 views
0

У меня есть NSTableView с двумя столбцами, один с нередактируемым NSTextField, а другой с редактируемым. Каждая ячейка имеет другой идентификатор («Камера» для первого столбца, «Позиция» для другого).NSTableView makeViewWithIdentifier находит nil в одном из своих дочерних представлений

У меня нет проблем с ячейкой первого столбца, однако второй («Позиция») находит нуль при попытке получить доступ к редактируемому NSTextField. Я попытался использовать только один идентификатор. Объявление его в начале viewForTableColumn и несколько других вещей, но он продолжает пропускать NSTextField. Любые идеи, что может пойти не так?

Мой код:

func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView? { 

    if tableColumn?.identifier == "Column0" { 
     let cell = tableView.makeViewWithIdentifier("Camera", owner: nil) as? NSTableCellView 
     cell?.textField?.stringValue = Array(cameraOrder.keys)[row] 
     return cell 

    } else { 
     let cell = tableView.makeViewWithIdentifier("Position", owner: nil) as? NSTableCellView 
     cell!.textField!.stringValue = String(Array(cameraOrder.values)[row]) //THIS ONE IS FINDING NIL 
     return cell 
    } 
} 

My Views:

Views Structure

+0

Вы проверили соединение? – Willeke

ответ

-1

я обнаружил способ сделать это, хотя я не знаю, если его оптимален:

кажется что наличие двух текстовых полей по какой-то причине привело к сбою моего кода. Я использую только идентификатор первого столбца («Камера») и изменяя его метку в соответствии с моими потребностями. Что происходит, так это то, что экземпляр первого текстового поля создается во второй ячейке столбца, но у него есть свойства, которые мне нужны.

let cell = tableView.makeViewWithIdentifier("Camera", owner: nil) as? NSTableCellView 
//...SET UP OF FIRST COLUMN, AND THEN WITHOUT CHANGING IDENTIFIERS..// 
cell?.textField?.delegate = self 
cell?.textField!.placeholderString = "Position Here" 
cell!.textField!.editable = true 
cell!.textField!.stringValue = String(Array(cameraOrder.values)[row]) 
return cell 
+0

Если вы не знаете, если это хороший ответ, не публикуйте его. Дайте нам время, чтобы ответить. – Willeke

+0

@ Уиллеке Я не отметил это так, как принято, чтобы дать другим шанс. Не могли бы вы устранить отрицательную оценку? –

+0

Другие рассматривают этот вопрос как ответ. Я не удаляю downvote, потому что я не хочу, чтобы начинающие разработчики следовали этому примеру. – Willeke

Смежные вопросы