NSSplitView:自定义双击处理程序
NSSplitView: custom double click handler
我正在尝试了解如何检测对 NSSplitView 分隔线的双击。在我看来,分频器既没有暴露给 NSSplitViewDelegate,也没有暴露给 NSSplitViewController。
到目前为止,我发现分隔线是 NSSplitDividerView 的一个实例,它是私有的 class,因此不能扩展或子class 它。
能否让我回到正确的调查轨道?
谢谢。
我很确定您可以在拆分视图的委托对象 return false
中实现 optional func splitView(_ splitView: NSSplitView, shouldCollapseSubview subview: NSView, forDoubleClickOnDividerAt dividerIndex: Int) -> Bool
方法,然后实现您想要的任何自定义操作。
一个可能的解决方案是继承 NSSplitView
并覆盖 mouseDown(with:)
。检查事件的位置是否在子视图之间。
override func mouseDown(with event: NSEvent) {
if event.clickCount == 2 {
let location = self.convert(event.locationInWindow, from: nil)
if location.x > NSMaxX(self.arrangedSubviews[0].frame) && location.x < NSMinX(self.arrangedSubviews[1].frame) {
Swift.print("doubleclick")
return
}
}
super.mouseDown(with: event)
}
我正在尝试了解如何检测对 NSSplitView 分隔线的双击。在我看来,分频器既没有暴露给 NSSplitViewDelegate,也没有暴露给 NSSplitViewController。
到目前为止,我发现分隔线是 NSSplitDividerView 的一个实例,它是私有的 class,因此不能扩展或子class 它。
能否让我回到正确的调查轨道?
谢谢。
我很确定您可以在拆分视图的委托对象 return false
中实现 optional func splitView(_ splitView: NSSplitView, shouldCollapseSubview subview: NSView, forDoubleClickOnDividerAt dividerIndex: Int) -> Bool
方法,然后实现您想要的任何自定义操作。
一个可能的解决方案是继承 NSSplitView
并覆盖 mouseDown(with:)
。检查事件的位置是否在子视图之间。
override func mouseDown(with event: NSEvent) {
if event.clickCount == 2 {
let location = self.convert(event.locationInWindow, from: nil)
if location.x > NSMaxX(self.arrangedSubviews[0].frame) && location.x < NSMinX(self.arrangedSubviews[1].frame) {
Swift.print("doubleclick")
return
}
}
super.mouseDown(with: event)
}