我正在创建NSTextView
,我想在NSTextView为空时更改插入点的大小。
看门狗光标(I-Beam / IBeam光标)大小基于attributedString
的{{1}}属性的当前字体大小属性。
问题是因为NSTextView
有一个空NSTextView
,所以字符串上没有属性。这意味着我无法应用字体大小。
但是,我可以更改attributedString
以使fontSize正确 - 但插入点光标在我开始输入之前不会更新大小
查看以下屏幕截图:
请注意,右侧的textview有一个小的插入点光标:
所以我的问题是,当我初始化它时,是否需要在typingAttributes
上设置一个属性,以便使初始插入点光标的大小正确? (我希望它匹配NSTextView
字体)
编辑: @Mark Bessey提出了一个很好的问题 - 我设置输入属性的顺序是什么:
typingAttributes
答案 0 :(得分:1)
我只是遇到了同样的问题,并且-在任何地方都找不到合适的解决方案后-设法通过插入字符然后在同一周期中用空字符串替换该字符来迫使NSTextView更新其指针。
我正在textView(_:shouldChangeTextIn:replacementString :)中执行此操作,但我想它在其他地方也能正常工作。
let attributedString = NSAttributedString(string: " ", attributes: attributes)
let range = someRange
let insertLocation = range.location + range.length
textView.textStorage?.insert(attributedString, at: insertLocation)
textView.typingAttributes = attributes
textView.replaceCharacters(in: range, with: "")
答案 1 :(得分:0)
在我的applicationDidFinishLaunching方法中,在一个简单的测试应用程序中执行此操作:
match_phrase
我得到了我期望的大型工字形光标。
这与TextEdit的作用基本相同(示例代码here),因此就设置typingAttributes而言,它看起来并没有出错。
我想知道你是否在错误的时间设置属性。你什么时候设置typingAttributes?屏幕上的视图?它是第一响应者吗?
答案 2 :(得分: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
}
}