Tod*_*orf 5 macos cocoa objective-c appkit
我有一个基于文档的Cocoa Mac OS X应用程序.
我在我的应用程序中的一个功能是一个文本项列表,可以双击进行编辑.当用户双击其中一个文本项时,我将当前窗口的fieldEditor文本字段放在单击的文本项上以允许编辑.
除了一个问题,一切都很好.我无法弄清楚如何使fieldEditor文本字段剪辑 + 滚动而不是包装其文本.这是目前的样子:

看看文本如何包装到第二行?我不希望这样.我希望它保持一行滚动(并显示剪辑).
这是一个在文本较少的列表项上正常工作的示例:

这是我在视图控制器中尝试的内容:
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];
Run Code Online (Sandbox Code Playgroud)
注意中间的部分:我检查这fieldEditor是否是一个实例,NSTextView以便setDefaultParagraphStyle:在其上调用方法.这是我尝试fieldEditor通过NSLineBreakByClipping值来剪辑其文本.它没有任何效果.而且我甚至不确定这是我应该做什么来让你在fieldEditor一行上滚动.
另请注意,我在我的-fieldEditorRectForBounds:index:方法中计算的rect的高度是正确的,并且提供了一个rect,其正确的大小适合单行文本(在这种情况下为14.0像素).
我缺少什么使fieldEditor显示单行滚动/剪辑文本?
我也试过在中间部分添加这些行:
[[tv textContainer] setHeightTracksTextView:YES];
[[tv textContainer] setWidthTracksTextView:YES];
Run Code Online (Sandbox Code Playgroud)
这具有调整可见部分的所需效果的期望效果fieldEditor.但坏消息是,它并没有改变文本仍然被包装的事实,而不是剪辑+滚动.:(
这似乎与这个常数有关:
NSStringDrawingUsesLineFragmentOrigin
Run Code Online (Sandbox Code Playgroud)
可以在以下options:参数中使用:
-[NSAttributedString drawWithRect:options:attributes:]
Run Code Online (Sandbox Code Playgroud)
但就我而言,我是从一个NSText现场编辑工作,而不是一个NSAttributedString.我无法弄清楚如何使用NSText字段编辑器来做这种事情.
嗯... NSTextView的滚动行为完全依赖于 NSScrollView 。我不确定是否还有更多我没有看到的内容,但看起来您的问题的“历史性”解决方案是:
使用不同的控件
您可以在其标准 IB 标签配置中使用可编辑的 NSTextField,并启用编辑并选择滚动作为行为。当配置正确时,它已经为您完成了所有繁重的工作 - 无需直接使用字段编辑器。
...或者...
欺骗
将字段编辑器动态地放入适当大小和配置的 NSScrollView(仅允许水平滚动;不显示滚动条),然后在完成编辑后删除滚动视图。
| 归档时间: |
|
| 查看次数: |
973 次 |
| 最近记录: |