【问题标题】:NSTextView paste: how to paste "bar" instead when "foo" is pasted?NSTextView 粘贴:粘贴“foo”时如何粘贴“bar”?
【发布时间】:2013-07-06 08:18:07
【问题描述】:

我有一个 NSTextView,用户可以在其中粘贴纯文本。

当用户在粘贴板中有“foo”时,我希望粘贴“bar”。换句话说,用户进入网页浏览器,选择“foo”,cmd+c,切换到我的 NSTextView,cmd+v 并且“bar”出现在插入点。

请问,有谁知道如何处理这个问题?

编辑:是否有可能为此使用readSelectionFromPasteboard:type:?我只是不知道在我重写的 textview 的方法体中放什么..?

【问题讨论】:

  • 是不是很具体的文字替换功能?
  • 这决定了答案的复杂性
  • @DanF:它只是用字符串“bar”替换字符串“foo”。纯文本。

标签: objective-c cocoa nstextview


【解决方案1】:

试试这个。子类化您的文本视图,并覆盖粘贴:这样:

@implementation RDTextView

-(void)paste:(id)sender {
    NSPasteboard *pb = [NSPasteboard generalPasteboard];
    NSString *pbItem = [pb readObjectsForClasses: @[[NSString class],[NSAttributedString class]] options:nil].lastObject;
    if ([pbItem isKindOfClass:[NSAttributedString class]]) 
        pbItem = [(NSAttributedString *)pbItem string];

    if ([pbItem isEqualToString:@"foo"]) {
        [self insertText:@"bar"];
    }else{
        [super paste:sender];
    }
}

@end

【讨论】:

  • 谢谢!拜托,我还有一个问题:这个“破坏”粘贴板中的“foo”,所以如果我粘贴到这个 textview 中,然后再次粘贴到另一个应用程序中,它会粘贴“bar”,对吗? - 是否可以将此 foo/bar“调整”“本地”保留到我的文本视图?我的意思是,不要使用writeObjects
  • @EcirHana 是的,这是可能的。请参阅我编辑的答案。如果拾取的“foo”是属性字符串(富文本)而不是痛苦字符串,此版本也会进行替换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 2023-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多