我需要你的帮助UIActivityViewController.我需要为文件提供活动控制器,除了默认操作,用户将能够在其他应用程序中打开该文件.我知道如何使用UIDocumentController,它显示popover所有应用程序能够打开文件.但是,我如何才能展示所有这些应用程序UIActivityViewController?
PS此行为可以在Apple Mail应用程序中看到,例如.
我有一些适用于iOS 7的共享代码,但从iOS 8开始,不再有效.
@IBAction func onShareButton(sender: UIButton) {
let movie = NSBundle.mainBundle().URLForResource("IMG_0564", withExtension: "mp4")!
let items = [movie]
let activity = UIActivityViewController(activityItems: items, applicationActivities: nil)
if activity.respondsToSelector("popoverPresentationController") {
activity.popoverPresentationController?.sourceView = sender
}
self.presentViewController(activity, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
正如我所说,这在iOS 7中运行良好,但是从iOS 8开始,当我选择分享到Facebook时,视频剪辑不再附加到帖子(或在共享面板中可见).所有其他选项工作,邮件,保存到视频,AirDrop等都似乎工作正常.
我也尝试将这些项目作为AVAssets传递:
let items = [movie].map { AVAsset.assetWithURL($0) }
Run Code Online (Sandbox Code Playgroud)
和NSData:
let items = [movie].map { NSData(contentsOfURL: $0) }
Run Code Online (Sandbox Code Playgroud)
这两者都没有对这个问题产生任何影响.
如果我在Objective-C中使用道德等价物,那么问题也会发生,它与语言无关.
无论如何在使用时设置邮件主题和/或电子邮件收件人UIActivityViewController?
我能够成功发送消息,但无法弄清楚如何设置主题或设置邮件收件人.
在iOS 6中,点击Photos应用程序中的操作按钮会显示标准的UIActivityViewController:

从Messages中执行相同操作会提供一组不同的选项.这看起来像是在使用UIDocumentInteractionController api来拉取所有可以处理图像的应用程序.

我的问题是双重的:
如何进入"消息"操作菜单?Tumblr和Halftone,仅举几例,已经做到了......我似乎无法找到文档.
如何显示消息样式的操作菜单?当我呈现一个UIActivityViewController它没有那些选项...只是标准设置facebook/twitter/copy/print/save to camera roll/etc.
谢谢!
sharing ios uidocumentinteraction uidocument uiactivityviewcontroller
我UIActivityController在我的项目中添加了.看起来这个特定主题的帮助很少.我面临的问题是链接在Facebook上以奇怪的方式分享,而不是通常在Facebook上共享的方式.为了更有意义,照片和链接都在iOS Photos文件夹中,没有任何选项可以更改它.
下面是它们目前如何在Facebook上共享的示例图像:

它们通常如何在Facebook上共享以及我想要的内容:

这是我用来在我的项目中添加UIActivityController的代码:
UIActivityViewController *objVC = [[UIActivityViewController alloc]initWithActivityItems:[NSArray arrayWithObjects:titleString, [NSURL URLWithString:urlString], imageTaker, nil] applicationActivities:nil];
[self presentViewController:objVC animated:YES completion:nil];
[objVC setCompletionHandler:^(NSString *activityType, BOOL completed)
{
NSLog(@"Activity = %@",activityType);
NSLog(@"Completed Status = %d",completed);
if (completed)
{
UIAlertView *objalert = [[UIAlertView alloc]initWithTitle:@"Alert" message:@"Posting was success" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[objalert show];
objalert = nil;
}else
{
UIAlertView *objalert = [[UIAlertView alloc]initWithTitle:@"Alert" message:@"Posting was not successful" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[objalert show];
objalert = nil;
}
}];
Run Code Online (Sandbox Code Playgroud)
除此之外,我还在控制台中收到一些警告,如下:
Registering unknown app identifier …Run Code Online (Sandbox Code Playgroud) 我正在开发一个iOS应用程序,它使用UIActivityViewController来共享一些文本和一个URL.在Facebook和Twitter服务中,它显示了位于URL的站点的缩略图.
不幸的是,有问题的网站在缩略图中看起来并不是很好.因此,目前缩略图在共享对话框中具有负值.我想要阻止缩略图显示,或者为缩略图提供我自己的图像.这样做的最佳方法是什么?
我想避免创建自己的服务和/或对话框.
我已经尝试将图像添加到项目列表中,但是这会添加一些我不想要的服务,并将图像添加到电子邮件操作中,并将图像添加到Facebook上的相册中.我可以通过将我不想要的黑名单行动解决的第一个问题.我可以制作自己的UIActivityItemProvider来阻止电子邮件问题.但是,我不知道如何防止Facebook问题.(请参阅如何在发布到Facebook和Twitter时自定义UIActivityViewController以显示URL链接?).
这是facebook分享对话框的屏幕截图:

我在这里回顾了一堆帖子,大量的在线教程/示例代码,我很难过.在我的应用程序中,我显示iOS7本身提供的UIActivityController没有问题,其中包含适合我的应用程序的共享选项(AirDrop和邮件).
我遇到的具体问题是当用户选择通过邮件共享选项时,将保存的文档附加到电子邮件中.消息正文正在设置为文本,但附件是MIA.相关代码是:
//生成要为当前显示的记录共享的XML文件... NSURL*url = [self createShareFile];
UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:@[@"Data shared from my app.", url] applicationActivities:nil];
// Filter out the sharing methods we're not interested in....
controller.excludedActivityTypes = @[UIActivityTypePostToTwitter, UIActivityTypePostToFacebook,
UIActivityTypePostToWeibo,
UIActivityTypeMessage,
UIActivityTypePrint, UIActivityTypeCopyToPasteboard,
UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll,
UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr,
UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo];
// Now display the sharing view controller.
[self presentViewController:controller animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
我错过了什么?我的文件正确创建,内容正确,NSURL对象包含文件的正确路径.
谢谢!
我正在使用a UIActivityViewController来共享视频文件.视频文件在使用之前共享之前生成UIActivityItemProvider.
由于文件生成和共享可能需要一段时间才能播放更长的视频,因此用户可以取消共享操作非常重要.
这一切在iOS7.0中都没有问题.用户可以随时点击取消按钮UIActivityViewController,共享操作被取消.
在iOS7.1.1上测试相同功能时,在执行共享操作时点击取消按钮不再有效.就像主线程被阻塞一样,但所有共享代码都在后台线程上执行.
我在这里缺少什么,或者iOS7.1中是否存在已知问题/变化?(我在发行说明中找不到任何内容)
UPDATE
感谢所有的评论.
进一步调试似乎表明可能存在线程问题.我的UIActivityItemProvider'sitem方法使用信号量来创建基于块的异步导出方法defacto synchronous.因此也阻止它正在执行的线程.我认为这应该不是问题,因为该-(void)item方法的文档说:
在您的应用的辅助线程上调用此方法.
在iOS7.0下,UIActivityItemProvider's取消方法是从另一个线程调用而不是使用信号量的线程(正如文档所预期的那样),但是在iOS7.1下,是否可以从同一个(被阻塞的)线程调用它,导致它永远不会被执行?我无法测试这个,因为取消方法永远不会被执行,我不负责调用它.
有没有另一种方法可以强制我的导出方法同步执行而不会阻塞?基本上我的问题是UIActivityItemProvider'item方法有一个长时间运行的导出方法,但是`UIActivityItemProvider仍然需要能够在导出时接收取消调用.
我为Instagram创建了一个自定义UIActivity.我自定义UIActivity所需的活动项目之一是InstagramPhoto实例.该对象包含UIImage,标题和我要发送到instagram应用程序的其他内容.ios低于8,一切正常.但是当我使用ios8测试时,我看到了这个错误:
Unknown activity items supplied: (
"<InstagramPhoto: 0x18848310>"
)
Run Code Online (Sandbox Code Playgroud) objective-c uiactivityindicatorview uiactivityviewcontroller xcode6 ios8
我想阻止我的应用使用扩展机制将其内容分享给某些其他应用.例如,我希望用户能够共享链接,但不能使用Gmail应用.
我对这部纪录片的理解是:以下内容应该有效:
// vieController previously initialised like this: UIActivityViewController(activityItems: [provider], applicationActivities: nil)
viewController.excludedActivityTypes = ["com.google.Gmail.ShareExtension"]
Run Code Online (Sandbox Code Playgroud)
这不起作用.我错过了什么吗?非Apple活动类型是否不适用于此机制?
ios ×7
objective-c ×5
facebook ×3
sharing ×3
email ×2
ios8 ×2
ipad ×2
iphone ×2
airdrop ×1
attachment ×1
ios6 ×1
ios7 ×1
uidocument ×1
uikit ×1
xcode6 ×1