当我将文本粘贴到NSTextView时,我希望我只能粘贴纯文本。应删除所有富文本格式,包括:字体,颜色,链接和段落样式。粘贴的所有文本都应使用文本视图的默认字体和样式显示。 NSTextView默认接受富文本,如何禁用它?
答案 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的赞许,我去了用它。