标签: nstextview

如何根据 NSTextView 的内容自动调整其大小?

我正在制作一个应用程序,用户可以单击窗口上的任意位置,并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)

但是,我认为我使用它是错误的。因此,任何帮助将不胜感激。

macos cocoa nstextview swift swift5

3
推荐指数
1
解决办法
1368
查看次数

NSTextField事件并辞职第一响应者

我想实现一个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)

macos objective-c nstextfield nstextview first-responder

2
推荐指数
1
解决办法
3938
查看次数

NSTextView背景未正确调整大小

我在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)

macos cocoa colors nstextview

2
推荐指数
1
解决办法
868
查看次数

如何从一个线程使用NSTextView作为日志控制台?

我正在运行另一个处理线程,我想将结果记录到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个条目然后锁定整个事情.

cocoa nstextview

2
推荐指数
1
解决办法
1319
查看次数

附加到NSTextView

我有一个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位于工作表上,当鼠标指针位于其他地方而不是悬停在其上方时,似乎没有显示任何内容NSTextView
  • 为什么这样,虽然我已经设置了颜色/插入颜色NSTextView,但这似乎不适用于新插入的文本?
  • 什么是追加(+滚动)的建议的方式NSTextView

谢谢!

cocoa scroll append objective-c nstextview

2
推荐指数
1
解决办法
3627
查看次数

NSTextView圆角和绘制背景

对于两个我一直在努力解决以下问题:

我应该创建将要放置的消息聊天视图NSTableView.它必须有彩色背景,圆角,自定义边距.我试过NSTextField但没有成功.我有所需的背景和圆角,但文字显示不正确,因为它在多行的情况下从字段的中心开始.我也试过NSTextView,这似乎是在这种情况下更好的解决方案,但我无法设置圆角.我尝试过使用[textView.layer setCornerRadius:7.0];但没有效果.

谢谢你的回复!

macos cocoa objective-c nstextfield nstextview

2
推荐指数
1
解决办法
1434
查看次数

可以在NSTextView中加下划线,但不能加粗文本

我在Xcode 8中使用向导创建了一个NSDocuments和storyboard应用程序.在ViewController场景中,我添加了一个NSTextView.某些菜单项被禁用,例如Bold和Italic.

查看第一响应者,粗体和斜体的操作不存在.我应该自己写这些方法吗?这是由于响应者链没有正确设置吗?为什么下划线显示但不大胆?

编辑:添加图像以显示如何使用检查器栏编辑文本,但格式菜单不显示我期望的命令.

该图显示了我如何使用检查器栏修改文本,但不能使用菜单,除了下划线

macos nstextview nsdocument nsresponder swift

2
推荐指数
1
解决办法
674
查看次数

在Swift 3中将文本附加到NSTextView

我正在构建一个利用MDM API对设备属性进行批量更新的应用程序.

我希望在主视图中有一些可见的输出/日志记录,以便用户可以看到他们的CSV行可能出现故障以及HTTP响应代码是什么.我可以NSTextField很容易地附加到一个或一个标签上,但看看有多行可能有大量输出,我想有一个可滚动的文本框来附加信息.

我发现这样做的所有文档似乎都是Swift 2,这是我所缺少的一个难题.

或者,如果有更好的方法在主屏幕上显示某种日志记录输出,我也会对此持开放态度.

我已经尝试将我的插座声明为an NSScrollView和an NSTextView,并且似乎都没有区别.insertText好像被弃用了.

在过去,在Swift 2上我使用了这个解决方案,它对我很有用,但它不适用于swift 3.

append nstextview nsscrollview swift swift3

2
推荐指数
1
解决办法
4772
查看次数

如何在Swift中为NSTextView设置第一响应者?

编辑:在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成为第一响应者(灰色选择变为标准的天蓝色)。

xcode nstextview swift macos-sierra

2
推荐指数
1
解决办法
2041
查看次数

如何在 NSTextView 上禁用 Alt-Drag 选择?

我不知道,也找不到,当在 NSTextView 上按下 alt/选项按钮时,拖动选择功能的标准技术术语。

当按下 alt 时,会出现十字准线,并且可以在列中/垂直方向选择/突出显示文本,就像在 Xcode 中一样。

我想在我的 NSTextViews 中禁用这个功能,我该怎么做?

cocoa nstextview

2
推荐指数
1
解决办法
182
查看次数