我有一个可可,基于文件的Mac应用程序.
我的应用程序中有一个功能,就是可以双击编辑的文本项目列表。当用户双击其中一个文本项时,我将当前窗口的fieldEditor文本字段放在单击的文本项上,以允许编辑。
除了一个问题外,一切都很好。我不知道如何将fieldEditor文本字段剪贴画+滚动而不是 make 作为文本。以下是当前的样子:

看到文本是如何包装到第二行的吗?我不想这样。我希望它保持一行滚动(并出现剪裁)。
下面是它在文本较少的列表项上正确工作的一个示例:

下面是我在视图控制器中尝试的内容:
NSWindow *win = [listItemView window];
NSText *fieldEditor = [win fieldEditor:YES forObject:listItemView];
[fieldEditor setFont:[TDListItemView titleFont]];
[fieldEditor setAlignment:NSLeftTextAlignment];
[fieldEditor setDrawsBackground:YES];
[fieldEditor setBackgroundColor:[NSColor whiteColor]];
[fieldEditor setString:str];
[fieldEditor setDelegate:self];
[fieldEditor selectAll:nil];
if ([fieldEditor isKindOfClass:[NSTextView class]]) {
NSTextView *tv = (NSTextView *)fieldEditor;
NSMutableParagraphStyle *style = [[[tv defaultParagraphStyle] mutableCopy] autorelease];
[style setLineBreakMode:NSLineBreakByClipping];
[tv setDefaultParagraphStyle:style];
}
CGRect r = [self fieldEditorRectForBounds:[listItemView bounds] index:idx]; // height here is 10.0
[fieldEditor setFrame:r];
[fieldEditor setNeedsDisplay:YES];
[[self view] addSubview:fieldEditor];
[win makeFirstResponder:fieldEditor];注意中间的那个部分:我检查这个fieldEditor是否是NSTextView的一个实例,以便调用它上的setDefaultParagraphStyle:方法。这是我试图让fieldEditor剪辑它的文本--通过NSLineBreakByClipping值。没有任何效果。我甚至不确定这是不是我应该做的,以使fieldEditor滚动到一行。
还请注意,我在-fieldEditorRectForBounds:index:方法中计算的rect的高度是正确的,并提供了一个rect,它适合于一行文本(在本例中为14.0像素)。
要让fieldEditor显示一行滚动/剪裁的文本,我遗漏了什么?
我还尝试在中间部分添加这些行:
[[tv textContainer] setHeightTracksTextView:YES];
[[tv textContainer] setWidthTracksTextView:YES];这具有调整fieldEditor可见部分大小的理想效果,这是很好的。但坏消息是,它并没有改变文本仍然被包装的事实,而不是剪裁+滚动。:(
这似乎与这个常数有关:
NSStringDrawingUsesLineFragmentOrigin的options:参数中可以使用:
-[NSAttributedString drawWithRect:options:attributes:]但在我的例子中,我使用的是NSText字段编辑器,而不是NSAttributedString。我不知道如何用NSText字段编辑器来完成这类工作。
发布于 2012-04-05 22:52:42
嗯..。NSTextView的滚动行为完全依赖于NSScrollView。我不确定这其中是否还有我没有看到的,但看起来解决问题的“历史性”解决方案要么是:
使用不同的控件
您可以在其标准IB标签配置中使用可编辑NSTextField,并将其作为行为进行编辑、启用和滚动。当配置正确时,它为您完成了所有的繁重工作--不需要直接处理字段编辑器。
...or到..。
骗取
将字段编辑器放入适当大小和配置的NSScrollView (只允许水平滚动;不要动态显示滚动器),然后在编辑完成后删除滚动视图。
发布于 2013-04-26 15:30:49
NSMutableParagraphStyle* style = [[NSMutableParagraphStyle alloc] init];
[style setLineBreakMode:NSLineBreakByTruncatingHead];
NSMutableDictionary* attributes = [[NSMutableDictionary alloc] init];
[attributes setObject:style forKey:NSParagraphStyleAttributeName];
NSTextView* textView = [[NSTextView alloc] init];
[textView setTypingAttributes:attributes];发布于 2019-09-04 03:16:20
如果您使用NSTextView,请尝试以下代码..。
[self.textView setMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)];
[self.textView setHorizontallyResizable:YES];
[[self.textView textContainer] setWidthTracksTextView:NO];
[[self.textView textContainer] setContainerSize:NSMakeSize(FLT_MAX, FLT_MAX)];https://stackoverflow.com/questions/10036122
复制相似问题