我正在创建一个 NSTextView
当NSTextView为空时,我想改变插入点的大小。
看来,光标(I-Beam光标)的大小是基于当前字体大小属性在 attributedString
的财产 NSTextView
.
问题是,由于 NSTextView
空有 attributedString
在字符串上不能有任何属性,这意味着我不能应用字体大小。 这意味着我不能应用字体大小。
然而,我可以改变 typingAttributes
使字体大小正确--但插入点光标并没有更新大小,直到我开始输入
请看这几张截图:注意这里右边的文本视图有一个小的插入点光标。
所以我的问题是,是否有一个属性,我需要在文本视图中设置 NSTextView
当我初始化它时,为了使初始插入点光标的尺寸正确? (我希望它能与 typingAttributes
字体)
EDIT:@Mark Bessey提出了一个好问题--我设置输入属性的顺序是什么。
[_textEditor setTypingAttributes:typingAttributes];
[_textEditor setDelegate:self];
[view addSubview:_textEditor];
[self updateInsertionPointColor];
[[view window] makeFirstResponder:_textEditor];
[view setNeedsDisplay:YES];
在一个简单的测试应用程序中,在我的applicationDidFinishLaunching方法中,这样做是可行的。
NSFont *font = [NSFont fontWithName:@"Marker Felt" size:24.0];
NSDictionary *attr = @{
NSFontAttributeName: font
};
[self.textView setTypingAttributes:attr];
我得到了我所期望的大的I -Beam光标。
这与TextEdit的做法基本相同(示例代码 此处),所以看起来你并没有做错什么,至于设置 typingAttributes 的问题。
我想知道你是否在错误的时间设置了属性。你什么时候设置 typingAttributes?是屏幕上的视图吗?是第一反应人吗?
要在没有文字的时候改变属性,使用的是 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
}
}