如何UIActivity在iOS中创建自定义?
我想要这个的原因是在我的一个应用程序中添加一个Review App按钮,将用户带到App Store的评论部分.我该如何创建这样的自定义UIActivity?
我创建UIActivityViewController并通过String与URL它.这显然是配置UIActivityViewController使用我想要排除的一些项目(我的目标是分享有关我的应用程序的信息).
我设法通过设置适当的方法排除了许多系统提供的活动(如"添加到阅读列表")excludedActivityTypes.
但是,我无法排除提醒和Notes应用程序.有人可以建议一种方法吗?这些应用程序在列表中显示第3和第4,因此除非用户滚动,否则Twitter和Facebook不可见.
我最近开始与UIActivity合作,将我的应用程序分享给全世界,但我遇到的问题很少.首先,我没有找到如何设置我的电子邮件的主题.有什么办法吗?其次,当我设置电子邮件的正文时,会有一个额外的"输入"(电子邮件的第一行是空白,我的文本从第二行开始).这是代码:
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects: @"Test", nil];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc]
initWithActivityItems:array applicationActivities:nil];
Run Code Online (Sandbox Code Playgroud)
在电子邮件中,它显示:
"
测试"
第三:有没有办法知道选择了哪种共享方法?因为我希望在用户在Twitter上分享时在我的帖子中包含一个标签,但现在它也被集成在电子邮件中,这显然没有意义.
谢谢!
我有保存在Documents目录中的jpg文件,可以从标准UIActivityViewController共享.所有活动项目(包括"保存图像")都按预期工作,但是当点击"保存图像"时,控制台中会显示以下错误,尽管事实上jpg确实已保存到相机胶卷.
这是iOS中的错误,还是我必须以某种方式指定我的文件是文件URL中的jpg(而不是视频)?
2015-07-29 06:46:58.317 AppName [4658:893408]视频/var/mobile/Containers/Data/Application/A63DF08E-21D0-435D-A0D7-84D73D632FC9/Documents/ImageStore/805/23.jpg无法保存到保存的相册:错误域= AVFoundationErrorDomain代码= -11828"无法打开"UserInfo = 0x1702e8b80 {NSLocalizedFailureReason =不支持此媒体格式.,NSLocalizedDescription =无法打开,NSURL = file:/// var/mobile/Containers /数据/应用/ A63DF08E-21D0-435D-A0D7-84D73D632FC9/Documents/ImageStore/805/23.jpg,NSUnderlyingError = 0x170c4f9f0"操作无法完成.(OSStatus error -12847.)"}
这是我正在使用的代码:
NSURL *fileURL = [NSURL fileURLWithPath: [...path to my file...] isDirectory:NO];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[fileURL] applicationActivities:nil];
activityViewController.excludedActivityTypes = @[UIActivityTypeCopyToPasteboard, UIActivityTypePrint, UIActivityTypeAssignToContact, UIActivityTypeAddToReadingList, UIActivityTypePostToVimeo];
[self presentViewController:activityViewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud) 在iOS 6中使用客户UIActivity子类时,可以指定从初始UIActionViewController视图中选择操作时将显示的自定义视图控制器.您可以通过从UIActivity子类的activityViewController方法返回对自定义视图控制器的引用来完成此操作.
activityViewController
此方法的默认实现返回
nil.使用视图控制器提供附加UI的子类可以重写此方法以返回该视图控制器.如果此方法返回有效对象,系统将为您显示返回的视图控制器,而不是调用该performActivity方法.在iPad上,您的视图控制器显示在弹出窗口内.在iPhone和iPod touch上,视图控制器以模态呈现.您的自定义视图控制器应提供自定义UI的视图,并应处理这些视图中的任何用户交互.完成活动后,请勿自行关闭视图控制器.相反,调用
activityDidFinish:方法并让系统为您解雇它.
请注意第一段末尾的位:在iPad上,视图控制器显示在弹出框内.在iPhone和iPod touch上,视图控制器以模态呈现.
但是,在iPad上activityViewController,无论我如何呈现UIActivityViewController(无论是模态还是通过弹出窗口),返回的视图控制器始终以模态方式显示.当通过弹出窗口呈现时,它会导致崩溃,因为它不认为它被解雇了.
我究竟做错了什么?这是iOS 6中的错误吗?
更新:这是一个简单的Xcode项目,用于说明问题.随意克隆它并玩游戏,看看你是否能看到我们出错的地方:github.com/simonwhitaker/GSActivityDemo
如果有人能提供一些见解,那就是徘徊.对于我的生活,我无法弄清楚如何使用UIActivityTypeMessage发送UIImage,尽管有人说这是可能的.
UIActivityTypeMessage
该对象将提供的内容发布到消息应用程序.使用此服务时,可以提供NSString和NSAttributedString对象作为活动项的数据.您还可以指定其内容使用sms方案的NSURL对象.适用于iOS 6.0及更高版本.在UIActivity.h中声明.
所以根据我的理解,我只能发送NSString/NSURL.我不认为你有可能.
我正在使用这个:
UIImage *image; // some image here.
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[ image ] applicationActivities:nil];
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.
是否有可能显示的Facebook UIActivity中UIActivityViewController,如果有一个在iOS的默认设置,facebook账号没有设置?现在,如果我进入一些fb帐户 - 我看到fb in UIActivityViewController,如果没有 - 没有看到.有任何想法吗?
我创建了一个自定义UIActivity以在共享表中显示.我创建了一个全彩色的60x60图标(png文件),但是当它显示时它只显示灰色的轮廓.我不明白我写错了什么.我希望有人看到我错过的东西.任何帮助将不胜感激.这是我的代码......
@implementation MyActivity
#pragma mark - Overrides
- (NSString *)activityType {
return @"MyType";
}
- (NSString *)activityTitle {
return @"ShareMe";
}
- (UIImage *)activityImage {
return [UIImage imageNamed:@"MyIcon_60x60.png"];
}
- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
return YES;
}
- (void)prepareWithActivityItems:(NSArray *)activityItems {
// Do Something
}
+ (UIActivityCategory)activityCategory {
return UIActivityCategoryShare;
}
@end
Run Code Online (Sandbox Code Playgroud) 是否有一个如何UIActivityViewController使用我自己的图标自定义共享菜单的示例IBAction?
我见过这个......
- (id)initWithActivityItems:(NSArray *)activityItems applicationActivities:(NSArray *)applicationActivities;
Run Code Online (Sandbox Code Playgroud)
但我还没有完成它的工作.
我正在使用UIActivityViewController几个自定义UIActivityProviders.我的提供者返回NSString,UIImage和自定义数据对象.我通过设置UIActivityViewController excludedActivityTypes和Apple的内置活动类型排除了我不想分享的活动.
我不喜欢的是在所呈现的UIActivityViewController上出现的不是活动类型的应用程序.我假设这些出现是因为应用已通知iOS 8他们可以处理文本和图像数据.例如Flickr,Evernote和FaceBook的共享扩展.这些活动有自己的活动URL类型,我不想硬编码.
我不想在我的活动共享中使用这些应用程序的原因是大多数都无法正常工作,最终给我的用户带来了糟糕的体验,并可能因为执行不当而责怪我的应用程序.现实情况是,这些应用程序无法处理他们声称的数据.例如,Evernote总是只显示一个空的帖子对话框.有些像Facebook的共享扩展甚至记录错误,如果他们无法处理数据类型(真的吗?).
是否可以阻止所有第三方共享扩展?
如果答案是否定的,我似乎只有两个选择:
困难来自于initWithPlaceholderItem:(id)placeholderItem.我传回一个通用的NSString或UIImage,这些扩展说他们可以处理,但通常不会或在发布时记录错误.这将是一个检测共享扩展的可怕地方.
我想为我的用户提供最灵活的共享体验,但不会以糟糕的第三方实施为代价.
我知道我们喜欢在SO上显示代码,但不能想到任何不仅仅是样板UIActivityController饲料.
uiactivity ×10
ios ×8
ios6 ×4
objective-c ×3
iphone ×2
cocoa-touch ×1
email ×1
facebook ×1
image ×1
ios7 ×1
ipad ×1
popover ×1
sdk ×1
uiimage ×1
xcode ×1