gpt4 book ai didi

cocoa - NSTextView 在字符上换行,而不是在单词上换行

转载 作者:行者123 更新时间:2023-12-03 16:19:55 24 4
gpt4 key购买 nike

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

我认为创建 NSATSTypesetter 的子类来重新实现此方法就像这样简单:

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

这对 TextView 的布局没有任何影响。每个布局上的每个换行符都会调用一次,但仅限于无论如何都会发生换行符的地方。

最佳答案

NSTextView 中的换行设置实际上是其 textStorage 中文本的一个属性。

您需要获取该 View 的 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];
}

关于cocoa - NSTextView 在字符上换行,而不是在单词上换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5871067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com