NSTableView:直接编辑文本字段而不突出显示整行

NSTableView: Directly editing a textfield without highlighting the whole row

我在 TableView 中有一个 NSTextfield。内容模式配置为ViewBased。所以我有类型:NSTableCellView

我的 Table 视图示例:

我的问题是在 select 编辑该行之前我无法编辑。但是,我想独立于行单击文本字段并直接编辑而不 select 编辑整行。

当前解决方案:在Table View中我目前可以将高亮设置为None然后直接编辑工作,但我仍然希望能够select整行时我在行中的 Textfield 之外单击。

如果有人能帮助我,我会很高兴。非常感谢!

免责声明 - 这是根据 here 的精彩回答改编的。

一种可能的方法是继承 NSTableView 并覆盖 hitTest,以便将用户交互事件直接发送到文本字段而不是单元格视图:

override func hitTest(_ point: NSPoint) -> NSView? {
    let myPoint = superview!.convert(point, to: self)
    let column = self.column(at: myPoint)
    let row = self.row(at: myPoint)

    // if we find an editable text field at this point, we return it instead of the cell
    // this will prevent any cell reaction
    if row >= 0, column >= 0,
        let cell = view(atColumn: column, row: row, makeIfNecessary: false),
        let textField = cell.hitTest(convert(myPoint, to: cell.superview)) as? NSTextField,
        textField.isEditable {
        return textField
    } else {
        return super.hitTest(point)
    }
}