我有,如果我输入一行标签的第51列之后NSTextView linewrapping一个奇怪的问题。 这仅与凸片发生,不与任何其他字符,它包裹在正确文本视图的边缘,第51字符后不。
这是很容易重复。 与单个窗口在Xcode中创建一个空白的项目,只是一个NSTextView。 唯一的非默认设置是我已删除的约束,以及所使用的老式自动调整到自动调整TextView的使其充满窗口。 我已经写任何代码。 现在运行应用程序,打开的窗口,以便为更广泛的超过51个字符,按住TAB键,它会早换。
提前致谢。
我有,如果我输入一行标签的第51列之后NSTextView linewrapping一个奇怪的问题。 这仅与凸片发生,不与任何其他字符,它包裹在正确文本视图的边缘,第51字符后不。
这是很容易重复。 与单个窗口在Xcode中创建一个空白的项目,只是一个NSTextView。 唯一的非默认设置是我已删除的约束,以及所使用的老式自动调整到自动调整TextView的使其充满窗口。 我已经写任何代码。 现在运行应用程序,打开的窗口,以便为更广泛的超过51个字符,按住TAB键,它会早换。
提前致谢。
这里的问题是,NSTextView有具有属性,如换行,制表位,利润等的列表默认NSMutableParagraphStyle对象...您可以通过格式菜单,文本子视图看到这一点,并选择“显示标尺”菜单。 (你会看到该菜单自由与任何NSTextView)。
一旦你显示标尺,你会看到所有的制表位,这将解释为什么一旦你到达最后一个制表位标签页的包装。
所以,你需要的解决方案是创建你想为你的段落样式对象标签的数组,然后设置要为NSTextView的风格。
下面是创建标签的方法。 在这个例子中,它会创建5个左对齐凸片,除了每个1.5英寸:
-(NSMutableAttributedString *) textViewTabFormatter:(NSString *)aString
{
float columnWidthInInches = 1.5f;
float pointsPerInch = 72.0f;
NSMutableArray * tabArray = [NSMutableArray arrayWithCapacity:5];
for(NSInteger tabCounter = 0; tabCounter < 5; tabCounter++)
{
NSTextTab * aTab = [[NSTextTab alloc] initWithType:NSLeftTabStopType location:(tabCounter * columnWidthInInches * pointsPerInch)];
[tabArray addObject:aTab];
}
NSMutableParagraphStyle * aMutableParagraphStyle = [[NSParagraphStyle defaultParagraphStyle]mutableCopy];
[aMutableParagraphStyle setTabStops:tabArray];
NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:aString];
[attributedString addAttribute:NSParagraphStyleAttributeName value:aMutableParagraphStyle range:NSMakeRange(0,[aString length])];
return attributedString;
}
然后调用它,你才能设置默认段落样式添加任何文字到您的NSTextView之前,这些标签在其停止:
[[mainTextView textStorage] setAttributedString:[self textViewTabFormatter:@" "]];
你可以在这里找到更多的信息,如果你想更深入的教程:
http://www.mactech.com/articles/mactech/Vol.19/19.08/NSParagraphStyle/index.html
我分享我的经验,因为我最近有一种相同类型的问题(S)的 - 按选项卡时,光标跳到下一行后约10-12标签 - 当有多行文本,按标签上的时整款变成符号线
我用“埃德·费尔南德斯”采用上述方法,当有在NSTextView没有文本最初但现有保存的文本被加载时,它有上述问题只能解决问题
为此,我从下面的链接尝试下面的代码(这真的工作,并解决了这两个问题) http://www.cocoabuilder.com/archive/cocoa/159692-nstextview-and-ruler-tab-settings.html
你不需要调用“释放”,如果你使用自动引用计数。
- (IBAction)formatTextView:(NSTextView *)editorTextView
{
int cnt;
int numStops = 20;
int tabInterval = 40;
NSTextTab *tabStop;
NSMutableDictionary *attrs = [[NSMutableDictionary alloc] init];
//attributes for attributed String of TextView
NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init];
// This first clears all tab stops, then adds tab stops, at desired intervals...
[paraStyle setTabStops:[NSArray array]];
for (cnt = 1; cnt <= numStops; cnt++) {
tabStop = [[NSTextTab alloc] initWithType:NSLeftTabStopType location: tabInterval * (cnt)];
[paraStyle addTabStop:tabStop];
}
[attrs setObject:paraStyle forKey:NSParagraphStyleAttributeName];
[[editorTextView textStorage] addAttributes:attrs range:NSMakeRange(0, [[[editorTextView textStorage] string] length])];
}
此选项卡限制是有原因的“标尺”概念,令它限制在大约12制表位。 你可以通过调用看到标尺
[editorTextView setRulerVisible:YES];