【发布时间】:2014-01-20 19:27:00
【问题描述】:
我有一个基于文档的应用程序,其中窗口具有拆分视图。左侧窗格是 NSOutlineView,右侧是显示元素的画布。
我目前支持画布和大纲视图的拖放(两者应该具有相同的粘贴板类型,并且应该能够拖放到右侧或左侧窗格中)。
我想弄清楚如何识别拖动的源窗口。这样我可以禁用在同一窗口内的画布或 NSOutlineView 上的拖放。我看到 NSDraggingInfo 有一个 draggingSource 属性,但我无法使用它,因为它不是原始窗口。它还有一个 draggingDestinationWindow 属性,但没有一个用于源。
知道如何解决这个问题吗?
更新
随着 Will 推动使用 draggingSource,我重新审视了我的代码并意识到我忽略了 draggingSource 的使用,因为有时我还处理来自 Finder 的拖动,当我尝试访问 NSView 的 window 属性时会崩溃。
我已经更新了以下方法的协议实现
- (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;
【问题讨论】:
标签: objective-c cocoa drag-and-drop