gpt4 book ai didi

swift - NSTableView 在单元格编辑开始时检测所选单元格的 NSTableColumn

转载 作者:行者123 更新时间:2023-11-30 10:10:17 25 4
gpt4 key购买 nike

我正在尝试以编程方式获取正在编辑的单元格的column.identifier。我试图通过为 NSControlTextDidBeginEditingNotification 注册 NSViewController 来获得,当我收到通知时,我通过鼠标位置跟踪数据:

var selectedRow = -1
var selectedColumn: NSTableColumn?

func editingStarted(notification: NSNotification) {
selectedRow = participantTable.rowAtPoint(participantTable.convertPoint(NSEvent.mouseLocation(), fromView: nil))

let columnIndex = participantTable.columnAtPoint(participantTable.convertPoint(NSEvent.mouseLocation(), fromView: nil))
selectedColumn = participantTable.tableColumns[columnIndex]

}

我遇到的问题是鼠标位置给了我错误的数据,有没有办法根据表格的位置获取鼠标位置,或者是否有更好的方法来获取此信息?

PS。我的 NSViewController 是 NSTableViewDelegate 和 NSTableViewDataSource,我的 NSTableView 是 基于 View ,并连接到正确更新的 ArrayController,我可以转到我的 Model 对象并检测 willSet 或 didSet 属性中的更改,但我需要检测用户何时进行更改,这就是为什么我需要在 NSTableView 上发生更改之前检测更改。

最佳答案

这个问题已有 1 年历史了,但我今天遇到了同样的问题并修复了它。人们在这里帮助了我很多,所以如果有人找到这个帖子,我会贡献自己的力量。
这是解决方案:

1/将 NSTextFieldDelegate 添加到您的 ViewController 中:

class ViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource, NSTextFieldDelegate {

2/当用户想要编辑单元格时,他必须首先选择该行。所以我们将使用这个委托(delegate)函数来检测:

    func tableViewSelectionDidChange(_ notification: Notification) {
let selectedRow = self.tableView.selectedRow

// If the user selected a row. (When no row is selected, the index is -1)
if (selectedRow > -1) {
let myCell = self.tableView.view(atColumn: self.tableView.column(withIdentifier: "myColumnIdentifier"), row: selectedRow, makeIfNecessary: true) as! NSTableCellView

// Get the textField to detect and add it the delegate
let textField = myCell.textField
textField?.delegate = self
}
}

3/当用户编辑单元格时,我们可以通过 3 种不同的功能获取事件(和数据)。选择您需要的:

override func controlTextDidBeginEditing(_ obj: Notification) {
// Get the data when the user begin to write
}

override func controlTextDidEndEditing(_ obj: Notification) {
// Get the data when the user stopped to write
}

override func controlTextDidChange(_ obj: Notification) {
// Get the data every time the user writes a character
}

关于swift - NSTableView 在单元格编辑开始时检测所选单元格的 NSTableColumn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33354596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com