使用格式复制文本 - iOS 6 NSAttributedString复制到粘贴板

时间:2012-10-08 21:08:57

标签: ios copy ios6 nsattributedstring uipasteboard

如何以编程方式从UITextView复制格式化文本(例如 italic ),以便在粘贴到其他程序(例如Mail)时保留格式?我假设正确的方法是将NSAttributedString复制到粘贴板。现在,我可以通过以下方法将常规字符串复制到粘贴板:

NSString *noteTitleAndBody = [NSString stringWithFormat:@"%@\n%@", [document title], [document body]];
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
pasteboard.string = noteTitleAndBody;

我注意到如果我使用标准文本选择“复制”菜单项从我的UITextView中选择和复制文本,它可以根据需要运行。但我需要通过我创建的按钮来访问它。

我想也许我可以调用UIResponderStandardEditActions复制方法。使用以下内容,粘贴到Mail中确实保留了格式,但我的应用程序也因此崩溃了。

NSMutableAttributedString *noteTitleAndBody = [[NSMutableAttributedString alloc] initWithString:[document title]];
[noteTitleAndBody appendAttributedString:[document body]];
[noteTitleAndBody copy:nil];

非常感谢正确执行此操作的示例。

PS - 我知道存在与NSAttributedString和粘贴板相关的现有线程,但它们似乎是for Cocoadon't reference the UIResponderStandardEditActions Copy method,或者早于iOS 6,其中许多UITextView属性可用

1 个答案:

答案 0 :(得分:1)

以下内容适用于textView当前的第一响应者:

[UIApplication sharedApplication] sendAction:@selector(copy:) to:nil from:self forEvent:nil];

由于我的复制按钮仅在我的textView已经重新签名firstResponder时才可访问,所以我不得不再做一些:

[self.noteTextView select:self];
self.noteTextView.selectedRange = NSMakeRange(0, [self.noteTextView.text length]);
[[UIApplication sharedApplication] sendAction:@selector(copy:) to:nil from:self forEvent:nil];
[self.noteTextView resignFirstResponder];

感谢以下帖子指出了我正确的方向:

Perform copy/cut from UIResponderStandardEditActions

can I call a select method from UIResponderStandardEditActions?