我有一个NSTextView用于编辑没有空格的长字符串,但带有标点字符。我希望它包含在行尾的任何字符处,而不是试图将其拆分为找到标点符号的单词,这会导致不均匀的行。
我认为像创建NSATSTypesetter
的子类一样容易重新实现此方法:
- (BOOL) shouldBreakLineByWordBeforeCharacterAtIndex:(NSUInteger)charIndex {
return YES;
}
这对文本视图的布局没有任何影响。每个布局上的每个换行符都会被调用一次,但只有在换行的地方才会被调用。
答案 0 :(得分:3)
NSTextView中的换行设置实际上是textStorage中文本的属性。
您需要获取该视图的NSTextStorage,这是一个NSMutableAttributedString,然后将该字符串的样式设置为您需要的换行设置。
请记住,存储中的文本会不断变化,文本本身也包含设置,因此您需要在每次更改时都保持设置。
将此方法称为[self setLineBreakMode:NSLineBreakByCharWrapping forView:txtView];每次更改文本存储时,例如:KVO观察txtView.string
-(void)setLineBreakMode:(NSLineBreakMode)mode forView:(NSTextView*)view
{
NSTextStorage *storage = [view textStorage];
NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
[style setLineBreakMode:mode];
[storage addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, [storage length])];
[style release];
}