2012-09-30 31 views
26

所以我尝试在iOS 6中新UIActivityViewController,它真的很容易启动和运行,但我无法弄清楚如何控制它就像我想要的。所以我想发布一篇文章的链接,我也想附上链接的图片。我不想将该图片上传到某个Facebook相册,就像一个网址缩略图一样。如何在发布到Facebook和Twitter时自定义UIActivityViewController以显示URL链接?

这很容易在Facebook的SDK来完成,因为他们给它的完全控制,但有没有办法与UIActivityViewController办呢?这是我得到的:

NSArray *activityItems = @[[NSURL URLWithString:[article link]], [UIImage imageNamed:@"myStockImage"]]; 
    UIActivityViewController *viewCont = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; 
    [self presentViewController:viewCont animated:YES completion:nil]; 

这个工程,但它将图像上传到'iOS相册'。如果我不在数组中添加图像,那么脸谱页看起来像是空白的,附件显示灰色的Safari浏览器徽标(如缩略图丢失!)在Safari中,当您尝试Facebook链接时,它会使用该页面的缩略图的屏幕抓取,我想要做这样的事情

UPDATE:

因此,这里是它看起来像我的应用程序(使用UIActivityViewController或SLCompose方式)。看看它是如何将图片上传到相册iOS Photos

Incorrect placement of photo

这里就是我想它看起来像(见Safari浏览器也):

enter image description here

回答

46

我搜索这件事,我得出的结论是,使用UIActivityViewController但只是没有办法的事,你打算什么。每次尝试分享照片时,都会让您将照片放入其中一张相册中,默认情况下为“iOS”相册。

就我而言,只要从我需要分享的链接中检索图像,就不需要发布照片(就像在您的Facebook时间轴上发布链接一样,它会自动从该图像抓取图片链接,图片成为链接)。为了做到这一点,我发现如果我只发布一个URL,它就不起作用。您必须先发布一些初始文本,然后输入网址,然后按activityItems阵列中的顺序放入对象。

这是我的工作代码:

NSArray * activityItems = @[[NSString stringWithFormat:@"Some initial text."], [NSURL URLWithString:@"http://www.google.com"]]; 
NSArray * applicationActivities = nil; 
NSArray * excludeActivities = @[UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypePostToWeibo, UIActivityTypePrint, UIActivityTypeMessage]; 

UIActivityViewController * activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:applicationActivities]; 
activityController.excludedActivityTypes = excludeActivities; 

[self presentViewController:activityController animated:YES completion:nil]; 

我也注意到,如果您一起发布这些对象中的照片,也不会检索链接的任何图像。

我希望这会有所帮助。

+0

已用时间!在这个血腥的事情,试图找出为什么它不会正确地采取我的网址。谢啦 ! – Alex

+0

使用google.com时可以使用,但使用链接到我们的Facebook页面时,它只显示一个丑陋的指南针。但是,当我在Facebook上分享链接时,链接是一个集成的“Facebook页面”链接,非常好。但它非常令人讨厌,在Facebook上使用自己的网页时,手机上的缩略图不会起作用。 grrr – bobmoff

+0

谢谢。它正在工作.... – Puvanarajan

1

如果你不”特别需要使用UIActivityViewController,使用SLComposeViewController很容易实现此目的。

+(void)presentShareWidgetWithText:(NSString*)text url:(NSURL*)url images:(NSArray*)images toService:(NSString*)service presentIn:(UIViewController*)parentViewController { 
    SLComposeViewController* controller = [SLComposeViewController composeViewControllerForServiceType:service]; 
    if (controller == nil) { 
     DLog(@"Could not initialize SLComposeViewController for %@!", service); 
     return; 
    } 
    if (url != nil) { 
     if (![controller addURL:url]) 
      DLog(@"Failed adding url %@!", url); 
    } 
    if (images != nil) { 
     for (UIImage* image in images) { 
      if (![controller addImage:image]) { 
       DLog(@"Failed adding image: %@", image); 
      } 
     } 
    } 
    if (![controller setInitialText:text]) { 
     DLog(@"Failed setting initial text: %@", text); 
    } 

    SLComposeViewControllerCompletionHandler handler = ^(SLComposeViewControllerResult result) { 
     switch (result) { 
      case SLComposeViewControllerResultCancelled: 
       DLog(@"SLComposeViewControllerResultCancelled"); 
       break; 

      case SLComposeViewControllerResultDone: 
       DLog(@"SLComposeViewControllerResultDone, Shared on service: %@", service); 
       break; 

      default: 
       DLog(@"Unhandled result: %d", result); 
       break; 
     } 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      [parentViewController dismissViewControllerAnimated:YES completion:^{ 
       DLog(@"Dismissed a controller here!"); 
      }]; 
     }); 
    }; 

    [controller setCompletionHandler:handler]; 

    [parentViewController presentViewController:controller animated:YES completion:^{ 
     DLog(@"Presented %@!", controller); 
    }]; 
} 
+1

那也不起作用。它在缩略图预览中添加图像,但是如果您看它,实际上是将图像放入名为“iOS照片”的相册中。我希望它只是缩略图预览(就像safari一样)。我不希望图片进入用户的相册 –

+0

嗯好吧我真的只是使用了链接到目前为止,没有图像。只有链接它从链接本身选择一个图像。它适用于链接目标是iOS应用程序URL的地方,这是我迄今为止唯一使用的。 – Jonny

0
- (void)tweetURL:(NSString *)url title:(NSString *)title { 
    TWTweetComposeViewController *twitter = [[TWTweetComposeViewController alloc] init]; 
    NSString *format = @"“%@” %@ /via @DesignSceneApp"; 
    NSString *message = [NSString stringWithFormat:format, title, url] 
    NSUInteger idx = title.length; 
    while (![twitter setInitialText:message]) { 
     idx -= 5; 
     if (idx > 5) { 
      message = [NSString stringWithFormat:format, 
       [NSString stringWithFormat:@"%@…", [title substringToIndex:idx]], 
       url 
      ]; 
     } else { 
      // Give up on the title. 
      message = [NSString stringWithFormat:@"%@ /via @DesignSceneApp", url]; 
      [twitter setInitialText:message]; 
      break; 
     } 
    } 

    [self presentViewController:twitter animated:YES completion:nil]; 
} 
+0

请注意您将来的代码格式:-) – kleopatra

1

更新了答案雨燕3.0

let url = URL(string: "google.com") 
let shareText = "Your string goes here" 
let shareItems: [Any] = [shareText, url!] 

let activityVC = UIActivityViewController(activityItems: shareItems, applicationActivities: nil) 
activityVC.excludedActivityTypes = [.airDrop, .postToFlickr, .assignToContact, .openInIBooks] 

self.present(activityVC, animated: true, completion: nil) 

Facebook不会接受该字符串,但是,像许多其他社交媒体网站,将显示一个图像/链接框的URL

相关问题