NSTableView:直接编辑文本字段而不突出显示整行
Posted
技术标签:
【中文标题】NSTableView:直接编辑文本字段而不突出显示整行【英文标题】:NSTableView: Directly editing a textfield without highlighting the whole row 【发布时间】:2021-11-11 15:08:02 【问题描述】:我在TableView
中有一个NSTextfield
。内容模式配置为ViewBased
。所以我有类型:NSTableCellView
。
我的表格视图示例:
我的问题是在选择行之前我无法编辑。但是,我想独立于行单击文本字段并直接编辑而不选择整行。
当前解决方案:在Table View
中,我目前可以将突出显示设置为None
,然后直接编辑工作,但是当我点击行中的Textfield
外部时,我仍然希望能够选择整行.
如果有人可以帮助我,我会非常高兴。非常感谢!
【问题讨论】:
【参考方案1】:免责声明 - 这是在 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)
【讨论】:
非常感谢,您解决了我的问题!但是现在我遇到的问题是文本字段的可点击区域比可见区域更下方。hitTest
的 point
参数位于视图的父视图的坐标系中,而不是视图本身的坐标系中。 column(at:)
和 row(at:)
期望在 table view 的坐标系中有一个点。
是的,@Willeke 你是对的。实际上转换功能应该可以解决问题,但它不能正常工作。所以你必须用鼠标再往下一点,然后它才能工作。如果我只使用点,那么我只会得到文本字段中的第一个条目。对于第二个条目,它根本不起作用。我认为,如果您修改转换功能或提供替代方案,它应该可以正常工作。
@Willeke 对,不知道我怎么错过了,谢谢,更新了答案。
@Fatih 根据 Willeke 的评论更新了答案,使用每个单元格的两个文本字段运行一些测试,并按预期选择字段。以上是关于NSTableView:直接编辑文本字段而不突出显示整行的主要内容,如果未能解决你的问题,请参考以下文章
三星 Galaxy Tab 中的 Sencha touch Textfield 突出显示行为