我正在尝试创建一个托盘弹出式应用程序,其表格与Dropbox在其弹出视图中的表格非常相似。 有一个文件表,当您将鼠标悬停在表格单元格上时,单元格将突出显示并显示其他控件。 我不确定NSTableView是否适用于此? 有没有人有任何建议?
答案 0 :(得分:5)
这将是NSTableView
的理想用途。使用基于视图的NSTableView,您可以轻松地创建这些单元格(视图)的外观。如果您使用NSTrackingArea
向表格视图添加-[NSView addTrackingArea:]
(滚动视图可能更好),那么鼠标悬停的亮点应该是可以实现的,这会为您提供-mouseMoved:
事件的回调。从该方法,您可以使用NSEvent上的locationInWindow
属性,然后使用NSTableView的-rowAtPoint:
调用来查询您应该更改哪一行以显示悬停事件。
答案 1 :(得分: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。
其他参考: