我使用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将为nil
逻辑上:因为此按钮仅在第4列可用。 在所有其他列中,它将是零。
我该如何解决这个问题?
答案 0 :(得分:0)
解决方案是在整个视图中添加NSTrackingArea
,而不是单个单元格。然后在整个表格视图中,您可以获取鼠标移动事件,获取NSEvent
的{{1}}。然后,locationInWindow
有一个方法NSTableView
,可以获取应该突出显示该按钮的当前行。