Переход к следующей строке NSTableview при нажатии клавиши возврата после редактирования - PullRequest
0 голосов
/ 18 октября 2018

Я зашел в тупик с моим кодом.У меня есть вид ячейки NSTableView, где я импортирую CSV-файл.Я хотел бы использовать табличное представление как электронную таблицу.Если я нажму клавишу возврата после редактирования определенной ячейки, она должна перейти к следующей строке, выделить ее и сделать ее редактируемой.

Я нашел код, написанный в цели c, но у меня не работает ни один.

Как мне это сделать?Надеюсь, что кто-нибудь сможет помочь.

Заранее спасибо.

У меня есть код:

func controlTextDidEndEditing(_ notification: Notification) {
        let editedColumn: Int = tableMain.editedColumn
        let editedRow: Int = tableMain.editedRow
        let lastRow: Int = tableMain.numberOfRows
        let lastCol: Int = tableMain.numberOfColumns
        var userInfo = notification.userInfo
        let textMovement = Int(truncating: userInfo?["NSTextMovement"] as? NSNumber ?? 0)

        //super.textDidEndEditing(notification)

        if textMovement == NSTabTextMovement {
            if editedColumn != lastCol - 1 {
                tableMain.selectRowIndexes(NSIndexSet(index: editedRow) as IndexSet, byExtendingSelection: false)
                tableMain.editColumn(editedColumn + 1, row: editedRow, with: nil, select: true)
            } else {
                if editedRow != lastRow - 1 {
                    tableMain.editColumn(0, row: editedRow + 1, with: nil, select: true)
                } else {
                    tableMain.editColumn(0, row: 0, with: nil, select: true) // Go to the first cell
                }
            }
        } else if textMovement == NSReturnTextMovement {
            if editedRow != lastRow - 1 {
                tableMain.selectRowIndexes(NSIndexSet(index: editedRow + 1) as IndexSet, byExtendingSelection: false)
                tableMain.editColumn(editedColumn, row: editedRow + 1, with: nil, select: true)
            } else {
                if editedColumn != lastCol - 1 {
                    tableMain.editColumn(editedColumn + 1, row: 0, with: nil, select: true)
                } else {
                    tableMain.editColumn(0, row: 0, with: nil, select: true) //Go to the first cell
                }
            }
        }
}

1 Ответ

0 голосов
/ 23 октября 2018

Мне удалось решить мою проблему, вероятно, не самый лучший метод, но у меня работает на 100%.

Я изменил свой tableView на View-Based.Затем я добавил действие для TextFields.После того, как действие выполнено, я ввел следующий код:

 tableWages.selectRowIndexes(NSIndexSet(index: tableWages.selectedRow + 1) as IndexSet, byExtendingSelection: false)
 tableWages.editColumn(colNr, row: tableWages.selectedRow, with: nil, select: true)

Таким образом, после редактирования значения и нажатия клавиши возврата, он перемещается к следующей строке и остается в том же столбце, делая следующее значениередактируемые.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...