如何在 macOS cocoa 上使用鼠标悬停时突出显示的单元格创建 table?
How to create table with highlighted-on-mouseover cells on macOS cocoa?
我正在尝试创建一个 table 与 Dropbox 的弹出窗口视图非常相似的托盘弹出窗口应用程序。
有一个 table 个文件,当您将鼠标悬停在 table 个单元格上时,单元格将突出显示并显示其他控件。
我不确定 NSTableView 是否是 suitable 的?
有人有什么建议吗?
这将是 NSTableView
的理想用途。使用基于视图的 NSTableView,您将能够轻松地创建这些单元格(视图)的外观。如果您使用 -[NSView addTrackingArea:]
将 NSTrackingArea
添加到 table 视图(滚动视图可能更好),鼠标悬停时的突出显示应该可以实现,这会为您提供 -mouseMoved:
的回调事件。通过该方法,您可以在 NSEvent 上使用 locationInWindow
属性,然后使用 NSTableView 的 -rowAtPoint:
调用来查询您应该更改哪一行以显示悬停事件。
作为此处可能的修正,我必须执行以下操作才能完成此工作:
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 的位置。
附加参考:
mouseover detection in NSTableView's NSCell?
我正在尝试创建一个 table 与 Dropbox 的弹出窗口视图非常相似的托盘弹出窗口应用程序。 有一个 table 个文件,当您将鼠标悬停在 table 个单元格上时,单元格将突出显示并显示其他控件。 我不确定 NSTableView 是否是 suitable 的? 有人有什么建议吗?
这将是 NSTableView
的理想用途。使用基于视图的 NSTableView,您将能够轻松地创建这些单元格(视图)的外观。如果您使用 -[NSView addTrackingArea:]
将 NSTrackingArea
添加到 table 视图(滚动视图可能更好),鼠标悬停时的突出显示应该可以实现,这会为您提供 -mouseMoved:
的回调事件。通过该方法,您可以在 NSEvent 上使用 locationInWindow
属性,然后使用 NSTableView 的 -rowAtPoint:
调用来查询您应该更改哪一行以显示悬停事件。
作为此处可能的修正,我必须执行以下操作才能完成此工作:
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 的位置。
附加参考:
mouseover detection in NSTableView's NSCell?