2013-05-10 120 views
1

在我的应用程序中,我想动态创建窗口(NSWindows)并且有一个特殊的窗口(这也是NSWindow,我称之为转储空间),我可以拖动其他窗口关闭它们。如何检测从另一个窗口拖动的窗口?

基本上,转储空间应该检测当我“放”一个窗口,因此它可以触发操作来释放和关闭窗口。

我可以使用Cocoa拖放模型吗?如果没有,我想知道一些解决方法,我可以做,以模拟这些行动。

回答

1

在您的转储空间类实现NSDraggingDestination协议,它有几个消息来处理拖动操作。在performDragOperation中:你可以处理你的窗口。我建议在开始拖动窗口mouseDown:mouseMoved:的类中实现NSDraggingSource。通过这种方式,您可以定义自己的用于拖动窗口的粘贴板数据类型。然后可以在转储空间中使用它来查看实际上丢弃的内容并触发窗口处理。所有要求的in this example都有一个相对复杂的例子。

+0

这个例子是相反的:将一个项目拖出视图创建一个窗口。提问者是如何询问如何将窗口拖到视图中以使用它并将其变为项目。 – 2013-05-12 18:33:03

+0

接受答案,因为我做了类似的事情。我使用'NSString'作为我的板型,实现了一个新的UTI,所以只有我的应用程序可以成为我的拖动操作的目的地。如果我可能还有一个额外的问题:现在我需要一种基于通过粘贴板传递的数据来关闭窗口的方法,我想通过传递字符串并将窗口存储在全局字典中,以便在放入倾倒。有更聪明的方法吗?谢谢。 – 2013-05-13 13:14:01

+0

是的,我认为将窗口保存在临时缓存中(比如字典)是最好的选择。 – 2013-05-13 14:34:53