【问题标题】:NSSplitView: custom double click handlerNSSplitView:自定义双击处理程序
【发布时间】:2019-07-15 19:16:48
【问题描述】:

我正在尝试找出如何检测双击 NSSplitView 分隔线的情况。在我看来,分隔符既没有暴露给 NSSplitViewDelegate,也没有暴露给 NSSplitViewController。

到目前为止,我发现分隔符是 NSSplitDividerView 的一个实例,它是一个私有类,因此不能对其进行扩展或子类化。

你能让我回到正确的调查轨道上吗?

谢谢。

【问题讨论】:

  • 按照我阅读 NSSplitViewController 类的方式,分隔符应该作为 splitViewItems 之一。你检查过这是不是真的吗?如果是这样,那么 NSViewController 很可能是要走的路;如果没有,那么我可以建议另一种(更骇人听闻的)方法。今晚晚些时候我可以编写一些示例代码,但如果你碰巧知道...

标签: swift cocoa divider nssplitview


【解决方案1】:

一种可能的解决方案是继承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)
}

【讨论】:

    【解决方案2】:

    我很确定您可以在拆分视图的委托对象中实现optional func splitView(_ splitView: NSSplitView, shouldCollapseSubview subview: NSView, forDoubleClickOnDividerAt dividerIndex: Int) -&gt; Bool 方法,返回false,然后实现您想要的任何自定义操作。

    【讨论】:

    • shouldCollapseSubview 已弃用。在 macOS 10.13 中不调用它。 splitView:doubleClickedOnDividerAtIndex: 是但它不是公共 API。
    • 我知道该功能已被弃用。我不知道splitView:doubleClickedOnDividerAtIndex:,这是一个好点。但是,如果可能的话,我想继续使用公共 API。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 2011-07-27
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多