覆盖粘贴:格式化文本

chr*_*o16 1 cocoa objective-c paste nsstring nspasteboard

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

这怎么可能?

谢谢!

Fel*_*xyz 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];
}
Run Code Online (Sandbox Code Playgroud)

这假设您不需要对字符串做一些非常奇特的事情(比如插入动画表情或其他东西),在这种情况下你不应该打电话,super而是自己做插入(如果你这样做就UITextView可以使用selectedRange正确插入的属性).

编辑:要从NSPasteBoard您应该使用–stringForType:其他几种数据访问方法之一获取数据.您可能必须验证字符串/数据以确保它可以粘贴.

你可能不应该打电话super但是请使用

[self insertText:formattedString];
Run Code Online (Sandbox Code Playgroud)

如果您在NSTextView上执行此操作.如果你正在与另一个班级一起工作,你必须找出在这种情况下适当的东西.