gpt4 book ai didi

objective-c - 苹果操作系统 X : How to force a Field Editor to scroll instead of wrap text?

转载 作者:太空狗 更新时间:2023-10-30 03:53:25 25 4
gpt4 key购买 nike

我有一个基于文档的 Cocoa Mac OS X 应用程序。

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

除一个问题外,一切正常。我不知道如何制作 fieldEditor 文本字段 clip + scroll 而不是 wrap 其文本。这是它目前的样子:

enter image description here

看到文本如何换行到第二行了吗?我不想要那个。我希望它保持一行滚动(并显示为剪裁)。

这是它在文本较少的列表项上正常工作的示例:

enter image description here

这是我在我的 View Controller 中尝试的:

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: 方法中计算的矩形高度是正确的,并且提供的矩形大小适合单行文本(14.0 像素)在这种情况下)。

要使 fieldEditor 显示一行滚动/剪切文本,我缺少什么?


我也试过在中间部分添加这些行:

    [[tv textContainer] setHeightTracksTextView:YES];
[[tv textContainer] setWidthTracksTextView:YES];

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


这似乎与这个常量有关:

NSStringDrawingUsesLineFragmentOrigin

可以用在options:参数中:

-[NSAttributedString drawWithRect:options:attributes:]

但就我而言,我使用的是 NSText 字段编辑器,而不是 NSAttributedString。我不知道如何使用 NSText 字段编辑器来做这类事情。

最佳答案

Hmmm ... NSTextView 的滚动行为完全依赖于 NSScrollView。我不确定是否还有更多我没有看到的内容,但看起来您的问题的“历史性”解决方案是:

使用不同的控件

您可以在其标准 IB 标签配置中使用可编辑的 NSTextField,并启用编辑并选择滚 Action 为行为。正确配置后,它已经为您完成了所有繁重的工作 - 无需直接使用字段编辑器。

...或...

作弊

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

关于objective-c - 苹果操作系统 X : How to force a Field Editor to scroll instead of wrap text?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10036122/

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