OS X:如何通过视图将鼠标拖动事件传递给superview

时间:2016-05-19 19:56:47

标签: swift macos

我正在使用Swift for OS X构建一个应用程序,我有NSTabView我可以将图像拖入其中。对于每个被拖入的图片,它会添加一个新标签,NSTabViewItem包含一个NSImageView,其中包含被拖入的NSImage

我创建了一个处理拖动操作的NSTabView类的子类。

我让代码在拖动图像并正确创建新标签的位置工作。但是,一旦显示NSImageView(拖入后),现在,当拖动新图像时,NSImageView会阻止拖动信息并且不会接收拖动操作。因此,如果我将它们放在显示先前拖动图像的NSImageView上方的边缘,我只能拖动新图像。

有没有办法让NSImageView对鼠标拖动事件透明,以便它们传递到下面的NSTabView

我尝试将NSImageView.enabled设置为false,并尝试覆盖hitTest的{​​{1}}。但这些似乎都没有起作用。

1 个答案:

答案 0 :(得分:0)

您可以使用NSView

上的功能

func unregisterDraggedTypes()

在您创建的NSImageView上,以阻止他们吃掉粘贴板上的图像。

这应该允许底层的NSTabView子类接收拖动事件。

或者,如果那不起作用,请放置一个NSView子类,它将在NSTabview的顶部接收拖动事件并覆盖hitTest,以便点击进入下方的视图。

override func hitTest(aPoint: NSPoint) -> NSView? {
    return nil
  }