问题:
理解:
数据流:
我试图利用启动选项键没有运气.
简而言之,我似乎无法理解:
最终结果:我试图远离
文档交互文档概述:
这是我最感兴趣的" 从其他应用程序打开文件 ".它指示我通过传入键的字典值来使用应用程序:didFinishLaunchingWithOptions:方法.这是我迷路的地方?如何设置密钥以使其知道要查找的"WHERE"和"WHAT"?我仍然不清楚App1应该保存信息的正确导演,以便键指向正确的位置?
在iBooks中打开电子邮件文件附件和打开pdf不是唯一可以使用此API的地方,否则Apple将无法完成所有工作,他们已经允许从App-To-App进行通话.
如果有人有一个示例应用程序,教程,甚至一个坚实的想法如何让这个工作,我真的很感激帮助.
-谢谢!
PS有1,500或更高信誉的人请为stackoverflow创建一个"UIDocumentInteraction"标签!
我正在尝试为我的iOS应用程序创建/导出独有的UTI类型(非常类似于Instagram独家处理UTI com.instagram.exclusivegram的方式).
基本上,我想com.photoapp.photo是一个应用程序可以使用,如果他们希望能够在任何注册拍照的应用程序中打开照片(类似于Instagram的com.instagram.photo).然后我想com.photoapp.exclusive只能在我的应用程序中打开(类似于com.instagram.exclusivegram).
我在设备上遇到的是即使使用com.photoapp.exclusive,UIDocumentController也会提示我在PhotoApp或DropBox中打开它,它应该只是PhotoApp.
我有我的应用程序注册UTI以及我用来检查开放能力的示例应用程序.我在示例应用程序中使用的代码如下:
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"photoapp://"]]) {
NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"derp.png"], 1.0);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *fullPathToFile = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"photoapp.pae"];
[imageData writeToFile:fullPathToFile atomically:NO];
interactionController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"file://%@", fullPathToFile]]];
interactionController.UTI = @"com.photoapp.exclusive";
interactionController.delegate = self;
[interactionController presentOpenInMenuFromRect:self.view.frame inView:self.view animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
以下是我的app文件中的plist文件:
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeDescription</key>
<string>Exclusive PhotoApp Photo</string>
<key>UTTypeConformsTo</key>
<array>
<string>com.photoapp.photo</string>
</array>
<key>UTTypeIdentifier</key>
<string>com.photoapp.exclusive</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>pae</string>
</dict>
</dict>
<dict>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>pa</string>
</dict>
<key>UTTypeIdentifier</key>
<string>com.photoapp.photo</string>
<key>UTTypeDescription</key>
<string>PhotoApp …Run Code Online (Sandbox Code Playgroud) 我想在我的iOS应用程序中制作"Open in .."功能.
有没有办法检查此设备上的任何应用是否与我要共享的文件扩展名相关联?
如果当前设备上没有应用程序打开具有此类扩展名的文件,UIDocumentInteractionController而不是在单击"打开方式..."按钮后显示,但我不希望在这种情况下显示此按钮.
所以问题是:如何检查设备上的任何应用程序是否可以打开某个具有特定扩展名的文件?
更新:
例如UIDocumentInteractionController具有NSArray财产icons.
它包含可以使用我的扩展名打开文件的所有应用程序的图像.但是,如果没有应用程序,它会覆盖空应用程序的图像.
所以我不能用它来检查它docInteractionController.icons.count == 0.我正在寻找其他技巧.
提前致谢.
我有代码显示如下文档:
documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:self.thisUrl];
NSString *pathExtension = [self.thisUrl pathExtension];
if (pathExtension) {
NSString *UTI = (__bridge NSString*)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)(pathExtension), NULL);
if (UTI) {
documentInteractionController.UTI = UTI;
}
}
documentInteractionController.delegate = self;
[documentInteractionController presentOptionsMenuFromBarButtonItem:shareButton animated:YES];
Run Code Online (Sandbox Code Playgroud)
显示选项菜单时,它会显示可以打开文档的应用程序列表(例如消息),以及下面的操作列表.
选项菜单显示的列表操作与例如Mail应用程序中显示的菜单不同.
主要区别在于Mail应用程序显示"打印"选项,而我的选项菜单则没有.如何获取选项菜单以显示打印选项?


编辑:我做了进一步测试,我实现了方法:
- (BOOL)documentInteractionController:(UIDocumentInteractionController *)controller canPerformAction:(SEL)action
{
return YES;
}
- (BOOL)documentInteractionController:(UIDocumentInteractionController *)controller performAction:(SEL)action
{
return YES; // or NO, doesn't matter
}
Run Code Online (Sandbox Code Playgroud)
这具有在弹出视图中显示"打印","复制"和"保存到相机胶卷"操作的效果.当我点击它们时没有发生任何事情,可能是因为我没有正确实施-performAction.我还在控制台日志中收到有关使用旧方法的警告.
这在某些方面是向后退一步,因为在添加这些方法之前,我无法再打印一些能够使用文档交互控制器正确打印的文档.
我希望我的应用程序能够从整个 iOS 的其他应用程序复制文件(图像、视频等),在浏览了苹果文档和一些在线资源后,我仍然无法让它工作。我附上了一张我的信息 plist 的图片。
这是该部分的 plist 代码:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>All Files</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>public.data</string>
<string>public.content</string>
</array>
</dict>
</array>
Run Code Online (Sandbox Code Playgroud) 我创建了一个加载 PDF 文件的程序。我希望当用户编辑时,他们可以以 PDF 格式在任何地方发布文件。
我使用UIDocumentInteractionController还是使用UIActivityViewController?
这是代码:
import UIKit
import PDFKit
@available(iOS 11.0, *)
@available(iOS 11.0, *)
class PDFViewControllerEN: UIViewController {
var document: UIDocumentInteractionController!
override func viewDidLoad() {
super.viewDidLoad()
// retrieve URL to file in main bundle`
}
@IBOutlet var pdfview: UIView!
@IBAction func share(_ sender: UIButton) {
}
@IBAction func doAction2(_ sender: UIBarButtonItem) {
document.presentOptionsMenu(from: view.bounds, in: view, animated: true)
}
override func viewWillAppear(_ animated: Bool) {
//Here you are going to display your PdfController …Run Code Online (Sandbox Code Playgroud) 继承我的应用程序中的UIDocuemtnInteractionController(不显示邮件选项)

这是Apples示例项目使用的那个

以下是各自的代码
我的应用程序
docInteractionController = [UIDocumentInteractionController interactionControllerWithURL:fileURL];
[docInteractionController presentOpenInMenuFromBarButtonItem:(UIBarButtonItem*)sender animated:YES];
Run Code Online (Sandbox Code Playgroud)
Apple示例项目
NSURL *fileURL;
if (cellIndexPath.section == 0)
{
// for section 0, we preview the docs built into our app
fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:documents[cellIndexPath.row] ofType:nil]];
}
else
{
// for secton 1, we preview the docs found in the Documents folder
fileURL = [self.documentURLs objectAtIndex:cellIndexPath.row];
}
self.docInteractionController.URL = fileURL;
[self.docInteractionController presentOptionsMenuFromRect:longPressGesture.view.frame
inView:longPressGesture.view
animated:YES];
Run Code Online (Sandbox Code Playgroud)
我应该怎样做才能获得邮件选项?
我有一个非常简单的测试应用程序,其中只包含以下代码,附加到UIButton:
- (IBAction)buttonUp:(id)sender {
// Build file path
NSString* filePath = [[NSBundle mainBundle] pathForResource:@"testfile"
ofType:@"txt"];
NSURL *url = [NSURL fileURLWithPath:filePath];
m_interactionController = [UIDocumentInteractionController interactionControllerWithURL:url];
[m_interactionController presentOptionsMenuFromRect:CGRectMake(200, 200, 100, 100)
inView:[self view]
animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
这构建没有问题,并在iOS 7(在第4代iPad:A1458)下运行,这个代码工作正常.
问题是,在iOS 8 Beta 5中,如果用户从中选择"邮件" UIDocumentInteractionController,则显示的电子邮件表永远不会被删除.点击发送确实发送邮件,但电子表格继续显示.点击取消并选择删除或保存草稿无效.
使用Xcode 5.1.1构建测试应用程序时会出现此问题.但是,如果应用程序是使用Xcode 6 GM构建的,则不会出现问题,并且代码工作正常.
上面的代码有什么问题吗?
我只是想知道是否有办法与UIDocumentInteractionController共享图片和文本.
我开发了一个具有共享功能的应用程序,到目前为止,我可以分享图片到Facebook,Twitter和Instagram,但没有图片的文字.
我现在用的是UIDocumentInteractionController,否则我不能设法通过Instagram的分享图片(例如,它是不可能的ActivityViewController这样做).