NSTextView换行符,而不是单词

时间:2011-05-03 14:31:53

标签: cocoa nstextview

我有一个NSTextView用于编辑没有空格的长字符串,但带有标点字符。我希望它包含在行尾的任何字符处,而不是试图将其拆分为找到标点符号的单词,这会导致不均匀的行。

我认为像创建NSATSTypesetter的子类一样容易重新实现此方法:

- (BOOL) shouldBreakLineByWordBeforeCharacterAtIndex:(NSUInteger)charIndex {
  return YES;
}

这对文本视图的布局没有任何影响。每个布局上的每个换行符都会被调用一次,但只有在换行的地方才会被调用。

1 个答案:

答案 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];
}