2011-05-03 59 views
2

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

我认为这将是其制造NSATSTypesetter一个子类重新实现此方法像这样一样简单:

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

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

回答

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