我在 iOS6 中使用新的 UIActivityViewController 类为用户提供各种共享选项。您可以将一系列参数(例如文本、链接和图像)传递给它,然后它会完成其余的工作。

如何定义收件人?例如,通过邮件或短信共享应该能够接受收件人,但我不知道如何调用这种行为。

我不想不得不单独使用 MFMessageComposeViewControllerUIActivityViewController 因为这违背了共享 Controller 的目的。

有什么建议么?

UIActivityViewController Class Reference

编辑:现在已提交 Apple,随后与重复的错误报告合并。

Bug report on OpenRadar

最佳答案

这里的所有功劳都归功于 Emanuelle,因为他想出了大部分代码。

虽然我想我会发布他的代码的修改版本,以帮助设置收件人。

我在 MFMailComposeViewController 上使用了一个类别

#import "MFMailComposeViewController+Recipient.h"
#import <objc/message.h>

@implementation MFMailComposeViewController (Recipient)

+ (void)load {
    MethodSwizzle(self, @selector(setMessageBody:isHTML:), @selector(setMessageBodySwizzled:isHTML:));
}



static void MethodSwizzle(Class c, SEL origSEL, SEL overrideSEL)
{
    Method origMethod = class_getInstanceMethod(c, origSEL);
    Method overrideMethod = class_getInstanceMethod(c, overrideSEL);

    if (class_addMethod(c, origSEL, method_getImplementation(overrideMethod), method_getTypeEncoding(overrideMethod))) {
        class_replaceMethod(c, overrideSEL, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
    } else {
        method_exchangeImplementations(origMethod, overrideMethod);
    }
}

- (void)setMessageBodySwizzled:(NSString*)body isHTML:(BOOL)isHTML
{
    if (isHTML == YES) {
        NSRange range = [body rangeOfString:@"<torecipients>.*</torecipients>" options:NSRegularExpressionSearch|NSCaseInsensitiveSearch];
        if (range.location != NSNotFound) {
            NSScanner *scanner = [NSScanner scannerWithString:body];
            [scanner setScanLocation:range.location+14];
            NSString *recipientsString = [NSString string];
            if ([scanner scanUpToString:@"</torecipients>" intoString:&recipientsString] == YES) {
                NSArray * recipients = [recipientsString componentsSeparatedByString:@";"];
                [self setToRecipients:recipients];
            }
            body = [body stringByReplacingCharactersInRange:range withString:@""];
        }
    }
    [self setMessageBodySwizzled:body isHTML:isHTML];
}

@end

关于iphone - 如何在 iOS 6 中为 UIActivityViewController 设置收件人?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13285848/

10-11 08:31