NSTextView改变插入点(Caret),当没有字符串时,改变光标大小。

问题描述 投票:2回答:2

我正在创建一个 NSTextView当NSTextView为空时,我想改变插入点的大小。

看来,光标(I-Beam光标)的大小是基于当前字体大小属性在 attributedString 的财产 NSTextView.

问题是,由于 NSTextView 空有 attributedString在字符串上不能有任何属性,这意味着我不能应用字体大小。 这意味着我不能应用字体大小。

然而,我可以改变 typingAttributes 使字体大小正确--但插入点光标并没有更新大小,直到我开始输入

请看这几张截图:注意这里右边的文本视图有一个小的插入点光标。enter image description here

我开始打字,它就会更新大小。enter image description here

所以我的问题是,是否有一个属性,我需要在文本视图中设置 NSTextView 当我初始化它时,为了使初始插入点光标的尺寸正确? (我希望它能与 typingAttributes 字体)

EDIT:@Mark Bessey提出了一个好问题--我设置输入属性的顺序是什么。

  [_textEditor setTypingAttributes:typingAttributes];
  [_textEditor setDelegate:self];

  [view addSubview:_textEditor];
  [self updateInsertionPointColor];

  [[view window] makeFirstResponder:_textEditor];
  [view setNeedsDisplay:YES];
cocoa nstextview appkit
2个回答
0
投票

在一个简单的测试应用程序中,在我的applicationDidFinishLaunching方法中,这样做是可行的。

NSFont *font = [NSFont fontWithName:@"Marker Felt" size:24.0];
NSDictionary *attr = @{
                         NSFontAttributeName: font
                       };
[self.textView setTypingAttributes:attr];

我得到了我所期望的大的I -Beam光标。

这与TextEdit的做法基本相同(示例代码 此处),所以看起来你并没有做错什么,至于设置 typingAttributes 的问题。

我想知道你是否在错误的时间设置了属性。你什么时候设置 typingAttributes?是屏幕上的视图吗?是第一反应人吗?


0
投票

要在没有文字的时候改变属性,使用的是 typingAttributes.

每当选择发生变化时,就会自动重置文字属性。但是,如果您添加了任何改变文字属性的用户操作,该操作应该使用此方法在之后应用这些属性。改变属性的用户操作应该总是设置打字属性,因为在下一次打字之前可能不会有后续的选择变化。

@IBOutlet var targetTextView: NSTextView!{
    didSet {
        let attributes:[NSAttributedString.Key:Any] = [
            .font:NSFont.userFont(ofSize: 16.0) ?? NSFont.systemFont(ofSize: 16.0),
            .foregroundColor:NSColor(named: "targetColor")!
        ]
        targetTextView.typingAttributes = attributes
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.