【问题标题】:UIActivityViewController or UIDocumentInteractionController with WhatsApp and FB带有 WhatsApp 和 FB 的 UIActivityViewController 或 UIDocumentInteractionController
【发布时间】:2014-01-20 00:35:22
【问题描述】:

我需要将 Facebook 和 WhatsApp 作为我的图片的共享选项。我已经实现了 UIActivityViewController,我可以通过 Facebook 和UIDocumentInteractionController 分享,我可以通过 WhatsApp 分享。我不知道如何合并这些东西。

UIActivityViewController:

UIActivityViewController *activityViewContoller = [[UIActivityViewController alloc] 
       initWithActivityItems:@[@"Test", image] applicationActivities:nil];
[self presentViewController:activityViewContoller animated:YES completion:nil];

UIDocumentInteractionController:

NSString *savePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/whatsAppTmp.wai"];
    [UIImageJPEGRepresentation(image, 1.0) writeToFile:savePath atomically:YES];

    _documentInteractionController = [UIDocumentInteractionController 
                 interactionControllerWithURL:[NSURL fileURLWithPath:savePath]];
    _documentInteractionController.UTI = @"net.whatsapp.image";
    _documentInteractionController.delegate = self;
    [_documentInteractionController presentOpenInMenuFromRect:CGRectZero 
                                    inView:self.view animated:YES];

我想将它们都放在一个弹出窗口中,但是我不知道如何实现。请问有什么建议吗?

我已经查看了StackOverFlow question 1,但它对我一点帮助都没有。我的文件是 .wai(用于 WhatsApp)所以当我尝试通过 FB 文件发送它时无法打开。它还显示所有选项,而我只希望 2(FB+WhatsApp) 可见。在StackOverFlow question 2 之后,我只能显示 FB(工作一个,因为我设置了普通图像)但不能添加 WhatsApp(没有 .wai 文件,我不知道如何处理 UTI)。有没有办法解决这个问题?

【问题讨论】:

  • 如果将 WhatsApp 实现为 UIActivity 会更好。问题是我不知道如何治疗 UTI 以及将这个 savePath 部分放在哪里。

标签: ios iphone objective-c whatsapp uiactivity


【解决方案1】:

更改文件类型:

- (void)share {
    NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/tmptmpimg.jpg"];
    [UIImageJPEGRepresentation(_img, 1.0) writeToFile:path atomically:YES];

    _documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:path]];
    _documentInteractionController.delegate = self;
    [_documentInteractionController presentOptionsMenuFromRect:CGRectZero inView:self.view animated:YES];
}

- (void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application {
    if ([self isWhatsApplication:application]) {
        NSString *savePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/tmptmpimg.wai"];
        [UIImageJPEGRepresentation(_img, 1.0) writeToFile:savePath atomically:YES];
        controller.URL = [NSURL fileURLWithPath:savePath];
        controller.UTI = @"net.whatsapp.image";
    }
}

- (BOOL)isWhatsApplication:(NSString *)application {
    if ([application rangeOfString:@"whats"].location == NSNotFound) { // unfortunately, no other way...
         return NO;
    } else {
         return YES;
    }
}

这样我们可以使用所有选项 - Facebook、Twitter 和自定义 WhatsApp。

只显示选定选项的问题仍未解决,但这是次要问题。

【讨论】:

  • 这里的什么是WhatsApplication?
  • 分享后不是会在主目录中创建一个额外的文件吗?
  • 那么 Facebook、Twitter 和 Instagram 的 UTI 是什么?
【解决方案2】:

要排除不需要的共享选项(您问题的第二部分),假设您的 UIActivityViewController 对象称为 activityController,请设置 excludeActivityTypes 属性,如下所示:

activityController.excludedActivityTypes = @[UIActivityTypeAssignToContact,
                                                 UIActivityTypePrint,
                                                 UIActivityTypeAddToReadingList,
                                                 UIActivityTypeAirDrop];

【讨论】:

  • 这是一个 UIDocumentInteractionController 而不是 UIActivityViewController。
猜你喜欢
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
  • 2017-04-20
相关资源
最近更新 更多