首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mac :如何强制字段编辑器滚动而不是包装文本?

Mac :如何强制字段编辑器滚动而不是包装文本?
EN

Stack Overflow用户
提问于 2012-04-05 21:15:58
回答 3查看 1.1K关注 0票数 5

我有一个可可,基于文件的Mac应用程序.

我的应用程序中有一个功能,就是可以双击编辑的文本项目列表。当用户双击其中一个文本项时,我将当前窗口的fieldEditor文本字段放在单击的文本项上,以允许编辑。

除了一个问题外,一切都很好。我不知道如何将fieldEditor文本字段剪贴画+滚动而不是 make 作为文本。以下是当前的样子:

看到文本是如何包装到第二行的吗?我不想这样。我希望它保持一行滚动(并出现剪裁)。

下面是它在文本较少的列表项上正确工作的一个示例:

下面是我在视图控制器中尝试的内容:

代码语言:javascript
复制
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显示一行滚动/剪裁的文本,我遗漏了什么?

我还尝试在中间部分添加这些行:

代码语言:javascript
复制
    [[tv textContainer] setHeightTracksTextView:YES];
    [[tv textContainer] setWidthTracksTextView:YES];

这具有调整fieldEditor可见部分大小的理想效果,这是很好的。但坏消息是,它并没有改变文本仍然被包装的事实,而不是剪裁+滚动。:(

这似乎与这个常数有关:

代码语言:javascript
复制
NSStringDrawingUsesLineFragmentOrigin

options:参数中可以使用:

代码语言:javascript
复制
-[NSAttributedString drawWithRect:options:attributes:]

但在我的例子中,我使用的是NSText字段编辑器,而不是NSAttributedString。我不知道如何用NSText字段编辑器来完成这类工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-05 22:52:42

嗯..。NSTextView的滚动行为完全依赖于NSScrollView。我不确定这其中是否还有我没有看到的,但看起来解决问题的“历史性”解决方案要么是:

使用不同的控件

您可以在其标准IB标签配置中使用可编辑NSTextField,并将其作为行为进行编辑、启用和滚动。当配置正确时,它为您完成了所有的繁重工作--不需要直接处理字段编辑器。

...or到..。

骗取

将字段编辑器放入适当大小和配置的NSScrollView (只允许水平滚动;不要动态显示滚动器),然后在编辑完成后删除滚动视图。

票数 3
EN

Stack Overflow用户

发布于 2013-04-26 15:30:49

代码语言:javascript
复制
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];
票数 0
EN

Stack Overflow用户

发布于 2019-09-04 03:16:20

如果您使用NSTextView,请尝试以下代码..。

代码语言:javascript
复制
[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)];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10036122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档