swiftmacoscocoanstableviewnstableviewcell

Print the NSTableView's row number of the row clicked by the user


I have a NSTableView with one column. I would like to print the row number of the row that the user has clicked on. I am not sure where I should start with this. Is there a method for this?


Solution

  • You can use the selectedRowIndexes property from the tableView in the tableViewSelectionDidChange method in your NSTableView delegate.

    In this example, the tableView allows multiple selection.

    Swift 3

    func tableViewSelectionDidChange(_ notification: Notification) {
        if let myTable = notification.object as? NSTableView {
            // we create an [Int] array from the index set
            let selected = myTable.selectedRowIndexes.map { Int($0) }
            print(selected)
        }
    }
    

    Swift 2

    func tableViewSelectionDidChange(notification: NSNotification) {
        var mySelectedRows = [Int]()
        let myTableViewFromNotification = notification.object as! NSTableView
        let indexes = myTableViewFromNotification.selectedRowIndexes
        // we iterate over the indexes using `.indexGreaterThanIndex`
        var index = indexes.firstIndex
        while index != NSNotFound {
            mySelectedRows.append(index)
            index = indexes.indexGreaterThanIndex(index)
        }
        print(mySelectedRows)
    }