希望每个人都知道iOS 6中包含的新风格ActionSheet (UIActivityViewController).的UIActivityViewController都可以用类似的字符串,网址,图像等paramentes启动下面是该代码段(其中的项目是用绳子和网址参数的数组).
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
Run Code Online (Sandbox Code Playgroud)
但是,当我们选择不同的分享选项(如Mail,Facebook或Twitter)时,我们是否可以分配不同的参数?
一种方法是我们可以实现UIActivityItemSource,我们需要在其中实现源方法
- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
Run Code Online (Sandbox Code Playgroud)
它总是返回一个字符串值.但我需要传递一个数组,以便我可以分配各种参数,如URL,图像和标题.
知道如何实现这一目标吗?
是否可以混合图像和文本并将其作为彩信发送?UIActivityViewController将与下方的文本共享图像,但无论我如何订购文本和图像,图像始终显示在顶部,文本显示在底部.如果不可能UIActivityViewController,还有另外一种方法吗?
我正在尝试使用的代码:
NSArray *activityItems = @[smallImage, @"Love", mediumImage, @"You", largeImage];
NSArray *applicationActivities = nil;
NSArray *excludeActivities = nil;
UIActivityViewController * activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:applicationActivities];
activityController.excludedActivityTypes = excludeActivities;
[self presentViewController:activityController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
它产生了这个结果:

但这就是我想要的:

我有一张从相机中取出的图像并保存到/ tmp文件夹中.
当我将此图像添加到UIActivityViewController的activityItems,然后按下与Twitter或Facebook共享时,我必须等待最多20秒才能显示共享对话框.
请注意,我指的是为Twitter/Facebook显示的实际"发布"对话框,而不是生成它的本机共享弹出窗口.
当我从照片应用程序共享相同的图像时,它会立即显示.
起初我认为照片应用程序正在调整图像大小,因为较小的图像显得更快,但我发现当我使用SLComposeViewController直接将相同的图像分享到Twitter或Facebook时,它(几乎)立即出现.
假设我在代码中做错了,这就是导致冰冷的对话框出现的原因:
NSArray *items = @[@"foo", [UIImage imageWithContentsOfFile:@"valid path to test image"]];
UIActivityViewController *vc = [[UIActivityViewController alloc]
initWithActivityItems:items applicationActivities:nil];
[self presentViewController:vc animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
这几乎是立即起作用的:
SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[controller setInitialText:@"foo"];
[controller addImage:[UIImage imageWithContentsOfFile:@"valid path to test image"]];
[self presentViewController:controller animated:YES completion:Nil];
Run Code Online (Sandbox Code Playgroud)
为了它的价值,我也尝试排除其他共享类型(我读过去AirDrop引起的问题),以及包装块以确保我在主线程上执行.
我想我做错了什么?
如果我不是,并且这两个其他方法实际上正在调整图像大小,是否有一些我缺少的文档提供了关于调整大小的指导?
**编辑:额外的测试似乎表明这个问题是iOS8独有的,因为我没有在较旧的iOS7设备上体验过它.
谢谢
objective-c ios slcomposeviewcontroller uiactivityviewcontroller
我正在使用UIActivityViewController来共享文本并链接到Linkedin.我收到了错误:
plugin com.linkedin.LinkedIn.ShareExtension interrupted
plugin com.linkedin.LinkedIn.ShareExtension invalidated
Run Code Online (Sandbox Code Playgroud)
我在ios设备上安装了Linkedin app.我该如何解决?
我正在使用UIActivityViewController邀请联系人到我的应用程序.我只需要分享一个特定的文字.它适用于所有共享选项,但是当我尝试发送SMS时,我找不到以编程方式添加特定联系人的选项,因为我已经拥有该联系人的电话号码.
我目前的代码看起来像这样 -
if(NSClassFromString(@"UIActivityViewController")) {
NSString *message = @"Hi,\nCheckout My App, a new messenger.";
UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:@[message] applicationActivities:nil];
[self presentViewController:activityVC animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
我尝试了子类化UIActivityItemProvider,但它基本上允许我向不同的提供者发送不同的消息,但我不希望这样.
有没有办法选择特定联系人或提供电话号码UIActivityViewController?
我正在使用UIActivityViewController分享,但在我设置其主题时,特别是它没有设置.请帮忙.
let eventURL = eventShare[sender.tag]
let eventTitleText = eventTitle[sender.tag]
let contentDescription = eventDescription[sender.tag]
let contentURL:NSURL = NSURL(string:eventURL)!
let activityViewController : UIActivityViewController = UIActivityViewController(activityItems: [contentDescription, contentURL],applicationActivities: nil)
activityViewController.setValue("Our Buzz - \(eventTitleText)", forKey: "Subject")
activityViewController.popoverPresentationController?.sourceView = self.view
self.presentViewController(activityViewController, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud) UIActivityViewController setCompletionWithItemsHandler未调用whatsapp活动.
有没有人遇到同样的问题?请分享解决方案.
NSArray *applicationActivities = @[[[JBWhatsAppActivity alloc] init]];
UIActivityViewController* activityViewController = nil;
if(installed)
activityViewController = [[UIActivityViewController alloc] initWithActivityItems:dataToShare applicationActivities:nil];
else
activityViewController = [[UIActivityViewController alloc] initWithActivityItems:dataToShare applicationActivities:applicationActivities];
// Setting subject field while sharing app with email
[activityViewController setValue:@"Check out this Site !" forKey:@"subject"];
NSArray *excludedActivities = @[UIActivityTypePostToWeibo,
UIActivityTypePrint,
UIActivityTypeCopyToPasteboard,
UIActivityTypeAssignToContact,
UIActivityTypeSaveToCameraRoll,
UIActivityTypeAddToReadingList,
UIActivityTypePostToFlickr,
UIActivityTypePostToVimeo,
UIActivityTypePostToTencentWeibo,
UIActivityTypeAirDrop
];
activityViewController.excludedActivityTypes = excludedActivities;
[activityViewController setCompletionWithItemsHandler:^(NSString * __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError)
{
}
];
[self presentViewController:activityViewController …Run Code Online (Sandbox Code Playgroud) 我试图消除所有的活动类型开始com.apple.UIKit.activity.Open.Copy从UIActivityViewController。
我尝试跟随但未成功,有人这样做吗?
func showShareActivity(videoURL : NSURL, onComplete:@escaping (Bool, UIActivityType?, Error?)->()) {
let activityVC = UIActivityViewController(activityItems: [videoURL], applicationActivities: nil)
activityVC.excludedActivityTypes = [UIActivityType(rawValue: "com.apple.UIKit.activity.Open.Copy.*")]
activityVC.completionWithItemsHandler = { (activity, success, items, error) in
onComplete(success, activity, erro
}
appDelegate?.window.rootViewController?.present(activityVC, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
注意:当我尝试一一排除时,它可以工作,但是我想一起删除(有些我可能不知道)。(Swift / ObjC任何解决方案都可以。)
com.apple.UIKit.activity.Open.Copy.com.apple.iMovie
com.apple.UIKit.activity.Open.Copy.com.apple.itunesu
com.apple.UIKit.activity.Open.Copy.net.whatsapp.WhatsApp
基本上这些都是以Import with或开头的Copy to,请参考下图。

我认为Evernote应用程序也是如此。
我正在尝试将我的iOS应用程序中的位置共享给WhatsApp,我希望它看起来像这样:
我正在做的是用以下代码发送vCard:
func vCardURL(from coordinate: CLLocationCoordinate2D, with name: String?) -> URL {
let vCardFileURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("Shared Location.loc.vcf")
let vCardString = [
"BEGIN:VCARD",
"VERSION:3.0",
//"PRODID:-//Apple Inc.//iPhone OS 10.3.2//EN",
"N:;My Location;;;",
"FN:My Location",
"item1.URL;type=pref:https://maps.apple.com/?ll=50.359890\\,12.934560&q=My%20Location&t=m",
"item1.X-ABLabel:map url",
"END:VCARD"
].joined(separator: "\n")
do {
try vCardString.write(toFile: vCardFileURL.path, atomically: true, encoding: .utf8)
} catch let error {
print("Error, \(error.localizedDescription), saving vCard: \(vCardString) to file path: \(vCardFileURL.path).")
}
print(vCardString)
return vCardFileURL
} // end of function
Run Code Online (Sandbox Code Playgroud)
//调用上方的聚会
let vURL = LocationVCard.vCardURL(from: self.newLocation.coordinate, with: "Berlin")
let activityViewController …Run Code Online (Sandbox Code Playgroud) 我正在使用UIActivityViewController将图像从我的应用发布到Instagram应用。
请注意,我的应用程序未使用Instagram API或登录用户的Instagram帐户。
let sharingImage = button.backgroundImage(for: [])
let avc = UIActivityViewController(activityItems: [sharingImage as AnyObject], applicationActivities: nil)
avc.excludedActivityTypes = [.addToReadingList,.airDrop,.assignToContact,.copyToPasteboard,.openInIBooks,.postToFacebook,.postToFlickr,.postToTencentWeibo,.postToTwitter,.postToVimeo,.postToWeibo,.saveToCameraRoll,.message,.mail,.print]
if let wPPC = avc.popoverPresentationController {
wPPC.sourceView = followUsButton
}
self.present(avc, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
我使用多个帐户登录了我的Instagram应用。从我的应用程序共享后,Instagram尝试发布到当前已登录的帐户“ A”(在Instagram应用程序内部)。这很有道理。
但是,如果我现在切换到Instagram应用程序并切换到其中的帐户“ B”,请返回我的应用程序,然后再次尝试共享,它会继续尝试发布到帐户“ A”。
修复它的唯一方法是杀死MY应用程序,然后重新启动它,然后加载正确的当前登录帐户“ B”。
有没有一种方法可以在共享时以编程方式重新加载正确的Insta帐户?