我正在尝试创建一个托盘弹出应用程序,其表格与 Dropbox 在其弹出窗口视图中的表格非常相似。有一个文件表格,当您将鼠标悬停在表格单元格上时,单元格将突出显示并显示其他控件。我不确定 NSTableView 是否适合这个?有人有建议吗?
问问题
1346 次
2 回答
7
这将是NSTableView
. 使用基于视图的 NSTableView,您将能够轻松地创建这些单元格(视图)的外观。NSTrackingArea
如果您使用向表格视图(滚动视图可能更好)添加一个鼠标悬停的突出显示应该可以完成-[NSView addTrackingArea:]
,它为您提供-mouseMoved:
事件回调。通过该方法,您可以使用locationInWindow
NSEvent 上的属性,然后使用 NSTableView 的-rowAtPoint:
调用来查询您应该更改哪一行以显示悬停事件。
于 2017-09-06T21:06:34.077 回答
0
作为此处可能的修改,我必须执行以下操作才能完成这项工作:
highlightedRow: MyCustomRow?
func viewWillAppear(){
configureTableHighlight()
}
func configureTableHighlight() {
let trackingArea = NSTrackingArea(rect: scrollView.frame, options: [.mouseMoved, .activeInKeyWindow, .inVisibleRect], owner: self, userInfo: nil)
scrollView.addTrackingArea(trackingArea)
}
override func mouseMoved(with event: NSEvent) {
let pointInTableView = tableView.convert(event.locationInWindow, to: nil)
let row = tableView.row(at: pointInTableView)
if row == -1 {
highlightedRow?.highlight = false
highlightedRow = nil
return
}
guard let view = tableView.view(atColumn: 0, row: row, makeIfNecessary: false) as? MyCustomRow else {
return
}
if(highlightedRow == view){
return
}
view.highlight = true;
highlightedRow?.highlight = false
highlightedRow = view;
}
然而,这可能取决于您添加 trackingView 的位置。
附加参考:
于 2020-12-07T04:31:54.540 回答