如果鼠标悬停在行上,则在一列中快速取消隐藏按钮



我使用 swift 4 for osx。 我有一个基于 NSTableView 的视图,有 4 列。 每列中的单元格具有相同的自定义单元格类:

class CustomCell: NSTableCellView {

@IBOutlet weak var btnInfo: NSButton!
private var trackingArea: NSTrackingArea!

override func awakeFromNib() {
super.awakeFromNib()
self.trackingArea = NSTrackingArea(
rect: bounds,
options: [.activeAlways, .mouseEnteredAndExited],
owner: self,
userInfo: nil
)
addTrackingArea(trackingArea)
}

override func mouseEntered(with event: NSEvent) {
super.mouseEntered(with: event)
btnInfo.isHidden = false
}
override func mouseExited(with event: NSEvent) {
super.mouseExited(with: event)
btnInfo.isHidden = true
}

}

现在我想实现以下情况:

如果用户将鼠标悬停在一行上,则btnInfo应该是可见的,并且再次隐藏,鼠标离开该行。

问题是(使用上面的代码(,我的应用程序崩溃了,因为 btnInfo 将为零

逻辑上:因为此按钮仅在第 4 列中可用。 在所有其他列中,它将为零。

我该如何解决这个问题?

解决方案是向整个视图添加NSTrackingArea,而不是单个单元格。然后在整个表格视图上,可以得到鼠标移动事件,取NSEventlocationInWindow。然后NSTableView有一个方法row(at point: NSPoint) -> Int,可以让你得到应该突出显示按钮的当前行。

最新更新