我在 iOS6 中使用新的 UIActivityViewController
类为用户提供各种共享选项。您可以将一系列参数(例如文本、链接和图像)传递给它,然后它会完成其余的工作。
如何定义收件人?例如,通过邮件或短信共享应该能够接受收件人,但我不知道如何调用这种行为。
我不想不得不单独使用 MFMessageComposeViewController
和 UIActivityViewController
因为这违背了共享 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/