0

我有一个简单的应用程序,它接受从 Finder 中删除文件。

我想支持 3 种不同的拖动类型:

  • 移动
  • 复制
  • 链接(制作别名)

在拖动时按 Alt+Cmd,Finder 通常会创建一个别名(链接)。但是,在我的应用程序中,在这种情况下没有设置draggingEntered:标志。NSDragOperationLink

以下是不同修饰键组合的各种标志:

move (no keys): Private, Delete, Copy, Generic, Link, Move, All_Obsolete, Every
copy (Alt)    :                  Copy,                      All_Obsolete, Every
link (Alt+Cmd):                  Copy, Generic,             All_Obsolete, Every

请注意在最后一种情况下如何未设置链接标志。我怎么知道performDragOperation:我需要创建一个别名?

我真的必须检查当前事件中的修饰键吗?我宁愿通过源拖动操作掩码获得一个干净的解决方案......

在 10.8.5 和 10.9 上测试。

4

2 回答 2

0

您需要首先在代码中注册您拖动的类型

      registerfordraggedtypes: api
于 2013-11-01T09:40:47.203 回答
0

是的,我知道这是一个非常古老的主题,但它仍然出现在搜索结果中。

对于跨应用程序的拖放操作,您必须按住 Control 以过滤 Link 标志。

在在线文档中,NSDraggingInfo draggingSourceOperationMask有一个表格显示了修饰键的处理方式,但它是错误的(它似乎在描述 Finder 的工作方式)。如果您可以挖掘有关拖放 API 的旧文档,它会显示不同的过滤算法,其中选项过滤器用于复制,命令过滤器用于通用,控制过滤器用于链接。这就是操作系统仍然适用于应用程序间拖放的过滤算法。

于 2021-10-24T19:17:21.607 回答