NSTableView rowForView всегда -1

У меня есть NSTableView с ячейками, основанными на представлении, TaskCell и NonTaskCell, и я создаю их так:

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

Из документации Apple я прочитал, что если ячейка не является NSTableRowView или подклассом, rowForView сообщит -1. Однако мой TaskCell это NSTableRowView, и я не понимаю, что происходит. Похоже, что созданы еще ряды внутри. Есть идеи? Вы также можете следить за кодом на git https://github.com/ralcr/Jirassic/blob/master/Jirassic/TasksScrollView.swift

1 ответ

Обновление: я обнаружил, что мой TaskCell является подпредставлением ячейки: rowView.subviews.first!Я не знаю, почему это так, но кажется, что теперь я могу найти правильный индекс с помощью итератора

Другие вопросы по тегам