在iOS中使用mime类型或UTI类型的内置图标

Joh*_*n K 13 iphone ios uidocumentinteraction

问题:

我希望能够在我的二进制文件内容列表中使用标准mime类型(或UTI类型)的内置iOS图标.

背景:

我已经研究过使用新的(自3.2)文档体系结构,但是使用UIDocumentInteractionController似乎假设实际的二进制文件已经在本地设备上了.

在我的情况下,我有一个远程服务器的文件列表,并知道远程文件的mime类型,名称,标题等,所以我只想显示带有图标的文件列表(实际二进制文件仅根据需要加载).

我从服务器获取的元数据包含二进制文件的正确mime类型,所以理论上我只想根据类型获取系统图标.

解决?

我尝试了以下"黑客"作为概念的证明,它似乎工作,但这似乎不是最好的方式...

//Need to initialize this way or the doc controller doesn't work
NSURL*fooUrl = [NSURL URLWithString:@"file://foot.dat"];
UIDocumentInteractionController* docController = [[UIDocumentInteractionController interactionControllerWithURL:fooUrl] retain];

UIImage* thumbnail = nil;
//Need to convert from mime type to a UTI to be able to get icons for the document
NSString *uti = [NSMakeCollectable(UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, (CFStringRef)self.contentType, NULL)) autorelease];

//Tell the doc controller what UTI type we want
docController.UTI = uti;

//The doc controller now seems to have icon(s) for the type I ask for...
NSArray* icons = docController.icons;
if([icons count] > 0) {
    thumbnail = [icons objectAtIndex:0];
}
return thumbnail;
Run Code Online (Sandbox Code Playgroud)

Ben*_*ngs 12

UIDocumentInteractionController无需指定URL 即可创建.该类的标题表示图标由nameif设置确定,URL否则.

UIDocumentInteractionController* docController = [[UIDocumentInteractionController alloc] init];
docController.name = @"foo.dat";
NSArray* icons = docController.icons;
// Do something with icons
...
[docController release];
Run Code Online (Sandbox Code Playgroud)


Hea*_*ers 10

我尝试了Ben Lings的解决方案,但它在模拟器或我的iPad3上都无法在iOS6.1上运行.您需要提供NSURLUIDocumentInteractionController,但URL并不需要存在.它的最后一个路径组件只需要你想要的扩展名.

以下代码对我有用

NSString *extension = @"pptx"; // or something else
NSString *dummyPath = [@"~/foo" stringByAppendingPathExtension:extension]; // doesn't exist
NSURL *URL = [NSURL fileURLWithPath:dummyPath];
UIDocumentInteractionController *documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:URL];
NSArray *systemIconImages = documentInteractionController.icons;

return systemIconImages;
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚找到解决方案 - > 1.编辑.plist文件2.找到Doucument类型 - >项目0 - >处理程序等级3.将值更改为所有者 (2认同)

小智 1

所以我们正在谈论黑客呃?我通过做了一些不好的事情来做到这一点,但它正在工作......我从 /system/library/frameworks/QuickLook.framework 复制了图标并添加到我的项目中。在同一文件夹内,有一些属性列表,用于在 UTI/extension/mime-type 与 png 文件之间建立链接。有了 plist 和 png,您所要做的就是制定一个逻辑来读取 plist 并显示正确的 png。