【问题标题】:How do you programmatically put folder icons on the Finder sidebar, given that you have to use a custom icon for the folder?鉴于您必须为文件夹使用自定义图标,您如何以编程方式将文件夹图标放在 Finder 侧边栏上?
【发布时间】:2010-11-06 23:09:33
【问题描述】:

我目前正在处理一个项目,虽然我可以通过添加到 com.apple.sidebarlists.plist 文件然后重新启动 Finder 来添加侧边栏项目,但我似乎不知道如何使用它来显示文件夹图标分配的自定义图标。

谁能给我一个链接或解决方案,让我这样做?提前致谢!

【问题讨论】:

    标签: objective-c cocoa sidebar finder


    【解决方案1】:

    不支持使用纯 Cocoa 执行此操作的方法。请改用 LSSharedFileList API。这是管理侧边栏列表的受支持方式,您可以在插入项目时提供自定义图标(作为图标服务中的 IconRef)。

    【讨论】:

    • 这个 API 在沙箱中运行时可用吗?
    • @DavidKocher 不幸的是,没有。
    • @dejuknow:错了。您为此使用 com.apple.coreservices.sharedlileslistd.xpc 服务。基本上,您创建一个 NSXPCServiceConnection,为您添加的 FileURL 创建一个带有 SFLListItem 的 SFLListChange 对象,w/bookmarkdata 包含图标属性(或使用 FsRef/UrlBookmarkData/whatever 获取现有的)然后通过 XPC 服务等将您的更改发布到 SFLList瞧。阅读应用沙盒指南了解详细信息。 Google for coreservices/sharedfileslist.framework 标头(或使用 nm/otool/classdump 转储它们)。祝你好运。
    【解决方案2】:

    我不知道这些图标,但我使用 EBLaunchServices 包装器将项目添加到侧边栏,该包装器可在此处开源:

    https://github.com/Eric-Bro/EBLaunchServices

    它非常易于使用。例如,将已安装的 OSXFUSE 卷添加到您调用的侧边栏:

    NSURL* volumeUrl = [NSURL fileURLWithPath:@"/Volumes/MyVolume"];
    [EBLaunchServices addItemWithURL:volumeUrl toList:kLSSharedFileListFavoriteVolumes];
    

    【讨论】:

      【解决方案3】:

      我太固执了,不能做显而易见的事。我做到了:

      [[NSWokspace sharedWorkspace] setIcon:someIcon forFile:someFile options:0];
      

      设置文件夹的图像图标。从那时起,我做了com.apple.sidebarlists.plist NSUserDefaults 附加,并通过Apple Events 重新启动了Finder。一切顺利。

      【讨论】:

      • 不要那样做。照彼得霍西所说的去做。没有充分的理由不使用 Launch Services API。
      • 嗯,NSWokspace...听起来很美味。
      猜你喜欢
      • 2013-02-06
      • 1970-01-01
      • 2013-04-13
      • 2011-03-21
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多