当前位置:  开发笔记 > IOS > 正文

当文件,图片等放在其停靠栏图标上时,如何让OS X应用程序做出反应?

如何解决《当文件,图片等放在其停靠栏图标上时,如何让OSX应用程序做出反应?》经验,为你挑选了2个好方法。

某些应用程序(如Photoshop)允许用户从Web浏览器拖动图片,或将文件从文件系统拖到停靠栏中的应用程序图标上.这样做会打开该应用程序中的文件.

这是怎么做到的?我想使用Cocoa和Objective-C,但我对任何语言的任何解决方案感兴趣.



1> Mecki..:

NSApplication允许您为应用程序设置委托.如果用户将文件拖到停靠栏图标上,NSApplication将调用该方法

- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename

你的委托对象,如果它实现任何这样的方法.如果内容实际上不是文件(例如,如果用户只选择应用程序中的文本并将其拖放到停靠栏图标上),则委托方法

- (BOOL)applicationOpenUntitledFile:(NSApplication *)theApplication

叫做.

请参阅NSApplication类参考

基本上你可以创建任何类型的任何对象(例如,只是继承NSObject的简单对象),在对象中定义上面的两个方法,然后在你启动的应用程序代码中的任何位置

whatever = [[YourObject alloc] init];
[[NSApplication sharedApplication] setDelegate:whatever];

就是这样.只要将文件或其他内容拖放到停靠栏图标上,就会调用相应的方法并且必须处理该请求.BTW如果您的应用程序与文件类型(例如.myFileType)关联,并且用户在Finder中双击具有该扩展名的文件,则会调用相同的方法.

幕后真正发生的事情是Launch Services向您的应用程序发送"开放文档"('odoc')Apple Event.NSApplication默认为此事件注册一个句柄,并通过调用适当的委托方法转发请求.您也可以直接听这个苹果活动,但为什么会这样?直接处理Apple Events很尴尬.当你的应用程序不是Cocoa,而是Carbon(plain-C)时,你可能不得不直接处理Apple Event(我不熟悉Carbon),但在Cocoa Apple已经为你捕获了最重要的Apple Events并转换它们进入您的应用程序可以收听的委托电话或通知.



2> Peter Hosey..:

如果您的应用程序是基于文档的,并且您在Info.plist中正确填写了必要的密钥,那么它就是Just Works.当用户将文件拖到应用程序的Dock磁贴上时,如果文件是您注册的类型,Dock将在磁贴上突出显示您的应用程序,如果用户将文件放在那里,NSDocumentController将实例化您的一个文档类文件.如果该文件不是您注册的类型,则两者都将忽略该文件.

那么,您的应用程序是基于文档的吗?如果是,该文件是您注册的类型之一吗?

欲获得更多信息:

适用于Mac的基于文档的应用编程指南

信息财产清单重点参考

如何使你的应用程序的Dock平铺突出显示[如果它应该但不是]

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有