我正在制作一个应用程序,用户可以单击窗口上的任意位置,并NSTextView以编程方式在鼠标位置添加 a 。我已经让它与下面的代码一起工作,但我希望它NSTextView水平扩展,直到到达屏幕边缘,然后垂直增长。它目前具有固定宽度,当我添加更多字符时,文本视图垂直增长(如预期),但我也希望它水平增长。我怎样才能实现这个目标?
我已经尝试将isHorizontallyResizable和设置isVerticallyResizable为 true 但这不起作用。经过一段时间的研究,我发现了这个https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/TextStorageLayer/Tasks/TrackingSize.html但这对我来说也不起作用。
my 中的代码ViewController将其添加NSTextView到其视图中:
private func addText(at point: NSPoint) {
let textView = MyTextView(frame: NSRect(origin: point, size: CGSize(width: 150.0, height: 40.0)))
view.addSubview(textView)
}
Run Code Online (Sandbox Code Playgroud)
并且,MyTextView类如下所示:
class MyTextView: NSTextView {
override func viewWillDraw() {
isHorizontallyResizable = true
isVerticallyResizable = true
isRichText = false
}
}
Run Code Online (Sandbox Code Playgroud)
我也看到了这个答案/sf/answers/3795970321/,但我不完全确定如何实现它。我已添加此代码片段MyTextView并使用它,如下所示:
override func didChangeText() {
frame.size = contentSize
}
Run Code Online (Sandbox Code Playgroud)
但是,我认为我使用它是错误的。因此,任何帮助将不胜感激。
我想实现一个NSTextField,当我点击它时,它会选择所有文本.(为了让用户轻松删除所有当前文本)当我完成编辑后,通过按Enter/tab或将鼠标移到其矩形之外,我会将焦点移出字段,并将其alpha值更改为0.5.
我的代码:
H文件:
#import <Foundation/Foundation.h>
@interface MoodMsgTextField : NSTextField<NSTextFieldDelegate>
@end
Run Code Online (Sandbox Code Playgroud)
M文件:
-(BOOL) becomeFirstResponder
{
NSLog(@"become first responder");
BOOL result = [super becomeFirstResponder];
if(result)
{
[self setAlphaValue:1.0];
[self performSelector:@selector(selectText:) withObject:self afterDelay:0];
}
return result;
}
-(BOOL) refusesFirstResponder
{
return NO;
}
-(BOOL) resignFirstResponder
{
NSLog(@"resigning first responder");
BOOL result = [super resignFirstResponder];
NSText* fieldEditor = [self.window fieldEditor:YES forObject:self];
[fieldEditor setSelectedRange:NSMakeRange(0,0)];
[fieldEditor setNeedsDisplay:YES];
[self setAlphaValue:0.5];
return result;
}
-(void)awakeFromNib
{
self.delegate = self;
[self setAlphaValue:0.5];
[self setBordered:YES];
[self setWantsLayer:YES];
self.layer.borderWidth = 0.5; …Run Code Online (Sandbox Code Playgroud) 我在NSScrollView中有一个NSTextView.滚动视图具有高度和宽度的自动调整大小掩码,因此它会根据其所在的窗口更改大小.
文本视图的设置与Apple文档在此处推荐的方式非常相似.
但无论我在文本视图中放置什么设置,我都无法使用滚动视图调整背景颜色.
这是我正在处理的图片:

宽度有效,但不是高度.
这是我的textview的设置代码,因为它是这张图片:
NSTextView *view = [[NSTextView alloc] initWithFrame:NSMakeRect(0, 0, scrollview.contentSize.width, scrollview.contentSize.height) textContainer:textContainer];
[view setMinSize:NSMakeSize(0.0, scrollview.contentSize.height)];
[view setMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)];
[view setVerticallyResizable:YES];
[view setHorizontallyResizable:NO];
[view setAllowsDocumentBackgroundColorChange:YES];
[view setDrawsBackground:YES];
[view setAutomaticLinkDetectionEnabled:YES];
[view setAutoresizingMask:NSViewWidthSizable];
Run Code Online (Sandbox Code Playgroud) 我正在运行另一个处理线程,我想将结果记录到NSTextView,当发布新行时,它会更新视图并将滚动条定位到底部.有什么建议?
- (void)runProc
{
do {
[NSThread sleepForTimeInterval:0.1];
[self reportInfo:@"tick"];
} while (stop == NO);
}
- (void)report:(NSString*)string;
{
[[consoleView textStorage] beginEditing];
[[[consoleView textStorage] mutableString] appendString:string];
[[[consoleView textStorage] mutableString] appendString:@"\n"];
[[consoleView textStorage] endEditing];
NSRange range;
range = NSMakeRange ([[consoleView string] length], 0);
[consoleView scrollRangeToVisible: range];
}
Run Code Online (Sandbox Code Playgroud)
它得到大约50个条目然后锁定整个事情.
我有一个NSTask(有一个NSPipe设置)在后台运行,我想输出内容,因为他们进来,在NSTextView(output).
我正在使用的代码是:
NSMutableAttributedString* str = [[NSMutableAttributedString alloc] initWithString:s];
//[str addAttribute:NSForegroundColorAttributeName value:[NSColor whiteColor] range:NSMakeRange(0, [str length])];
[[output textStorage] appendAttributedString:str];
[output scrollRangeToVisible:NSMakeRange([[output string] length], 0)];
Run Code Online (Sandbox Code Playgroud)
问题:
NSTextView位于工作表上,当鼠标指针位于其他地方而不是悬停在其上方时,似乎没有显示任何内容NSTextViewNSTextView,但这似乎不适用于新插入的文本?NSTextView?谢谢!
对于两个我一直在努力解决以下问题:
我应该创建将要放置的消息聊天视图NSTableView.它必须有彩色背景,圆角,自定义边距.我试过NSTextField但没有成功.我有所需的背景和圆角,但文字显示不正确,因为它在多行的情况下从字段的中心开始.我也试过NSTextView,这似乎是在这种情况下更好的解决方案,但我无法设置圆角.我尝试过使用[textView.layer setCornerRadius:7.0];但没有效果.
谢谢你的回复!
我在Xcode 8中使用向导创建了一个NSDocuments和storyboard应用程序.在ViewController场景中,我添加了一个NSTextView.某些菜单项被禁用,例如Bold和Italic.
查看第一响应者,粗体和斜体的操作不存在.我应该自己写这些方法吗?这是由于响应者链没有正确设置吗?为什么下划线显示但不大胆?
编辑:添加图像以显示如何使用检查器栏编辑文本,但格式菜单不显示我期望的命令.
我正在构建一个利用MDM API对设备属性进行批量更新的应用程序.
我希望在主视图中有一些可见的输出/日志记录,以便用户可以看到他们的CSV行可能出现故障以及HTTP响应代码是什么.我可以NSTextField很容易地附加到一个或一个标签上,但看看有多行可能有大量输出,我想有一个可滚动的文本框来附加信息.
我发现这样做的所有文档似乎都是Swift 2,这是我所缺少的一个难题.
或者,如果有更好的方法在主屏幕上显示某种日志记录输出,我也会对此持开放态度.
我已经尝试将我的插座声明为an NSScrollView和an NSTextView,并且似乎都没有区别.insertText好像被弃用了.
在过去,在Swift 2上我使用了这个解决方案,它对我很有用,但它不适用于swift 3.
编辑:在macOS项目中
我有一个简单的ViewController,它在状态项菜单应用程序上显示为弹出框。
我使用NSTableView更改视图文本的文本,具体取决于单击的项目。我使用的代码与此类似:
mainTextField.insertText(newStr, replacementRange: theRange)
Run Code Online (Sandbox Code Playgroud)
(我使用insertText的目的是将更改记录在撤消管理器中)
然后我突出显示文本:
// create the new NSRange
let range = NSRange(location: startRange, length: newStrLength)
// select the range in field
mainTextField.selectedRange = range
Run Code Online (Sandbox Code Playgroud)
所有操作均正常,但突出显示了文本,但使用了浅灰色而不是通常的天蓝色,表明该控件不是第一响应者。当我单击该字段时,选择消失。
实际上,我希望NSTextView成为第一响应者,因此我可以直接复制所选文本。
编辑:如果我按键盘上的Tab键,我将使textView成为第一响应者(灰色选择变为标准的天蓝色)。
我不知道,也找不到,当在 NSTextView 上按下 alt/选项按钮时,拖动选择功能的标准技术术语。
当按下 alt 时,会出现十字准线,并且可以在列中/垂直方向选择/突出显示文本,就像在 Xcode 中一样。
我想在我的 NSTextViews 中禁用这个功能,我该怎么做?
nstextview ×10
cocoa ×6
macos ×5
swift ×4
objective-c ×3
append ×2
nstextfield ×2
colors ×1
macos-sierra ×1
nsdocument ×1
nsresponder ×1
nsscrollview ×1
scroll ×1
swift3 ×1
swift5 ×1
xcode ×1