覆盖粘贴:格式化文本

时间:2010-02-23 17:15:49

标签: objective-c cocoa nsstring paste nspasteboard

我想捕获粘贴到控件中的字符串,并在粘贴之前对字符串应用一些自定义格式。

这怎么可能?

谢谢!

1 个答案:

答案 0 :(得分:6)

在视图/控件中覆盖paste:(粘贴:是UIResponderStandardEditActions非正式协议的一部分)。最简单的,你要做到这一点:

- (void)paste:(id)sender
{
   UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];
   NSString* rawString = pasteboard.string;
   NSString* formattedString =  // do something fun with rawString here
   pasteboard.string = formattedString;
   [super paste:sender];
}

这假设您不需要对字符串做一些非常奇特的事情(比如插入动画表情或其他东西),在这种情况下你不应该调用super但是自己进行插入(如果你是在UITextView上执行此操作,您可以使用selectedRange属性进行正确插入。

编辑:要从NSPasteBoard获取数据,您应使用–stringForType:several other data access methods之一。您可能必须验证字符串/数据以确保它可以粘贴。

您可能不应该致电super但请使用

[self insertText:formattedString];

如果您在NSTextView上执行此操作。如果你正在与另一个班级一起工作,你必须找出适合这种情况的课程。