2011-05-03 64 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]; 
}