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)
}
}
我在 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)
}
}