如何确定可可应用中拖动操作的源窗口



我有一个基于文档的应用程序,其中窗口具有拆分视图。左窗格是NsoutlineView,右侧是显示元素的画布。

我目前对画布和轮廓视图都有拖放和掉落(两者都应具有相同的粘贴类型,并且应该能够在右侧或左窗格上掉落)。

我想弄清楚如何识别阻力的源窗口。这样,我可以禁用在同一窗口中在画布或NSoutlineView上放置。我看到nsdragginginfo具有拖曳属性属性,但我无法使用它,因为它不是原始窗口。它还具有拖曳destinationWindow属性,但没有一个用于源。

知道我如何解决这个问题?


更新

在推动使用draggingsource的推动下,我是否会重新访问我的代码,并意识到我忽略了使用draggingsource的使用,因为有时我还会处理发现器的拖动,当我尝试访问nsview的窗口属性时会崩溃。p>我已更新了以下方法的协议实现

- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender

id<NSDraggingSource> dragSource = [sender draggingSource];
if ( [dragSource respondsToSelector:@selector(window)] && [(NSView *)dragSource window] == [self window])
    return NO;

如果这全都在一个应用程序中,则应该能够使用draggingSource

This method returns nil if the source is not in the same application as the destination. The dragging source implements methods from the NSDraggingSource protocol.

最新更新