NSTableView的makeViewWithIdentifier在其子视图

时间:2016-08-28 23:12:37

标签: swift macos cocoa nstableview

我有一个带有两列的NSTableView,一列带有不可编辑的NSTextField,另一列带有可编辑的列。每个单元格都有一个不同的标识符(第一列为“Camera”,另一列为“Position”)。

我对第一列的单元格没有任何问题,但是,当尝试访问其可编辑的NSTextField时,第二列(“位置”)找到nil。我试过只使用一个标识符。在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
    }
}

我的观点:

Views Structure

1 个答案:

答案 0 :(得分:-1)

我找到了这样做的方法,虽然我不知道它是否是最佳的:

似乎有两个textFields出于某种原因使我的代码崩溃。我只使用第一列的标识符(“Camera”)并修改其标签以满足我的需要。最终发生的事情是,第一个文本字段的实例是在我的第二个列单元格中创建的,但它具有我需要的属性。

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