swift - NSTableView rowForView 始终为 -1

标签 swift macos nstableview nstableviewcell

我有一个带有基于 View 的单元格、TaskCell 和 NonTaskCell 的 NSTableView,我像这样创建它们:

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

    let cellRow = row
    var theData = data[row]
    var cell: TaskCellProtocol? = nil
    switch Int(theData.taskType!.intValue) {
        case TaskType.Issue.rawValue:
            cell = self.tableView?.makeViewWithIdentifier(kTaskCellIdentifier, owner: self) as? TaskCell
        default:
            cell = self.tableView?.makeViewWithIdentifier(kNonTaskCellIdentifier, owner: self) as? NonTaskCell
    }
    assert(cell != nil, "Cell can't be nil, check the identifier")

    // Add data to the cell
    TaskCellPresenter(cell: cell!).presentData(theData, andPreviousData: row < data.count-1 ? data[row+1] : nil)

    cell?.didAddCell = { (cell: NSTableRowView) in
        RCLog(cell)
        let row = tableView.rowForView(cell as! NSTableRowView)
        tableView.enumerateAvailableRowViewsUsingBlock({ (rowView, rowIndex) -> Void in
            RCLog(rowView)
            if rowView == cell as! NSTableRowView {
                RCLog("found it")
                self.didAddRow?(row: cellRow)
            }
        })
    }
    RCLog(cell)
    return cell as? NSView
}

当我创建单元格时,它们的行为 -1,如以下日志所示:

TasksScrollView.swift:114: Optional(<Jirassic.TaskCell: 0x100e1eb60> - row: -1)
TasksScrollView.swift:114: Optional(<Jirassic.TaskCell: 0x100e269f0> - row: -1)
TasksScrollView.swift:114: Optional(<Jirassic.TaskCell: 0x100b120e0> - row: -1)
TasksScrollView.swift:114: Optional(<Jirassic.NonTaskCell: 0x100b181d0> - row: -1)

当我单击单元格内的按钮时,我调用 didAddCell 并将单元格本身作为参数。 RCLogCell(单元格)是

TasksScrollView.swift:101: <Jirassic.TaskCell: 0x100e269f0> - row: -1

枚举器中的日志是:

TasksScrollView.swift:107: <NSTableRowView: 0x6000001a24c0> - row: 0
TasksScrollView.swift:107: <NSTableRowView: 0x6000001a1b20> - row: 1
TasksScrollView.swift:107: <NSTableRowView: 0x6180001a0540> - row: 2
TasksScrollView.swift:107: <NSTableRowView: 0x6180001a07e0> - row: 3

从苹果文档中我读到,如果单元格不是 NSTableRowView 或其子类,则 rowForView 将报告 -1。然而我的 TaskCell 它是一个 NSTableRowView,我不明白发生了什么。似乎在内部创建了另一行。有任何想法吗? 也可以关注git上的代码https://github.com/ralcr/Jirassic/blob/master/Jirassic/TasksScrollView.swift

最佳答案

更新:我发现我的 TaskCell 是单元格的 subview :rowView.subviews.first! 我不知道为什么会这样,但似乎我现在可以使用迭代器找到正确的索引

关于swift - NSTableView rowForView 始终为 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33973791/

相关文章:

swift - Swift 2 方向步骤循环的语法

swift - NSTable中对象的列向数据

java - 我想要可以在 Windows、Mac 和 Linux 中打开“打开方式”对话框的 java 程序?

macos - cocoa osx mac 从地址簿中选择联系人

macos - NSTableView单元格编辑: where to perform post-editing operations?

swift - 将一些文本垂直居中放置在 NSTableView 的行中的正确方法是什么?

ios - 将 Swift3 Package Manager 与 Xcode 8 一起使用但没有成功

swift - 如何访问 textDidChange(_ :) as data for the NSTableView functions? 内自动创建的字典

ios - 安排后台任务

c - 如何从苹果网站获取套接字过滤器句柄(sflt_filter.sf_handle)的值以注册数据包过滤