当我将文本粘贴到NSTextView时,如何仅粘贴纯文本?

时间:2011-08-18 03:04:26

标签: cocoa copy-paste nstextview

当我将文本粘贴到NSTextView时,我希望我只能粘贴纯文本。应删除所有富文本格式,包括:字体,颜色,链接和段落样式。粘贴的所有文本都应使用文本视图的默认字体和样式显示。 NSTextView默认接受富文本,如何禁用它?

4 个答案:

答案 0 :(得分:9)

使用setRichText:禁用富文本。

答案 1 :(得分:7)

使用以下方法定义自定义NSTextView类:

- (NSArray *)readablePasteboardTypes {
    return [NSArray arrayWithObjects:NSStringPboardType, 
            nil];
}

注意:从Mac OS X开始,粘贴板类型的新typedef将以NSPasteboardTypeString而不是NSStringPBoardType的形式提供:

- (NSArray *)readablePasteboardTypes {
    return [NSArray arrayWithObjects:NSPasteboardTypeString,
            nil];
}

答案 2 :(得分:6)

NSTextView

中覆盖此方法
- (NSString *)preferredPasteboardTypeFromArray:(NSArray *)availableTypes restrictedToTypesFromArray:(NSArray *)allowedTypes {
  if ([availableTypes containsObject:NSPasteboardTypeString]) {
    return NSPasteboardTypeString;
  }

  return [super preferredPasteboardTypeFromArray:availableTypes restrictedToTypesFromArray:allowedTypes];
}

对我而言,这适用于粘贴和拖放。

答案 3 :(得分:0)

上述解决方案确实解决了提问者粘贴文本的问题,但我认为提问者可能想要更多。至少我来的时候是这样做的。

我只是希望文本字段中的所有字符始终具有相同的字体,无论它们是以编程方式插入,还是从笔尖插入,粘贴,拖入,键入或删除在圣诞老人。我搜索了Stack Overflow这个更广泛的问题,但没有发现任何问题(或答案)。

而不是这里给出的解决方案,use this idea。详细说明,给文本字段一个委托,实现这个......

- (void)textViewDidChangeSelection:(NSNotification *)note {
    NSTextView* textView = [note object] ;
    [textView setFont:[self fontIWant]] ;
}

完成。这适用于我能想到要测试的所有边缘情况。为此观察选择的变化有点奇怪。看起来像观察视图的文本对象的字符串值,或者注册NSTextDidChangeNotification,会更合乎逻辑,但是因为我已经设置了一个委托,并且由于上面的测试并且得到了Nick Zitzmann的赞许,我去了用它。