【问题标题】:NSTableView's makeViewWithIdentifier finding nil on one of its child viewsNSTableView 的 makeViewWithIdentifier 在其子视图之一上发现 nil
【发布时间】:2016-08-28 23:12:36
【问题描述】:

我有一个包含两列的 NSTableView,一列是不可编辑的 NSTextField,另一列是可编辑的。每个单元格都有不同的标识符(第一列是“相机”,另一列是“位置”)。

我对第一列的单元格没有任何问题,但是,当尝试访问其可编辑的 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
    }
}

我的观点:

【问题讨论】:

  • 你检查连接了吗?

标签: swift macos cocoa nstableview


【解决方案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

【讨论】:

  • 如果您不知道这是否是一个好的答案,请不要发布。给我们一些时间来回答。
  • @Willeke 我没有将其标记为已接受,只是为了给其他人一个机会。你会考虑去掉负号吗?
猜你喜欢
  • 2012-06-08
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多