使用一系列NSTextView,与单个NSLayoutManager连接。很常见的配置。每次用户点击Enter时,都会创建新的NSTextView。换句话说,每个段落都在其自己的NSTextView实例中。
但是这几天我一直在努力解决这个问题:如果链中的最后一个NSTextView是空的(例如,用户只需按Enter键并将光标移回到前一个文本视图中的某个位置),那么当返回此空时光标会消失NSTextView。如果我用鼠标点击,我必须在空文本视图中单击两次,这样光标就会出现。如果我用箭头键移动光标,那么,我再次按箭头键两次。
我尝试过更新游标,但没有任何反应。如果文本视图为空并且最后一个是串联的,则会发生此问题。我应该在哪里找到答案?搜索了这个论坛,Apple docs,用Google搜索 - 没有。
创建第一个文本视图
let textContainer = NSTextContainer(containerSize: containerSize)
layoutManager.addTextContainer(textContainer)
let textView = NSTextView(frame: frame, textContainer: textContainer)
someView.addSubview(textView)
创建第二个文本视图
let anotherTextContainer = NSTextContainer(containerSize: containerSize)
layoutManager.addTextContainer(anotherTextContainer)
let anotherTextView = NSTextView(frame: anotherFrame, textContainer: anotherTextContainer)
someView.addSubview(anotherTextView)
现在运行,键入内容并按Enter键。现在,如果您向上移动光标然后向下移动光标,它将不会显示。您必须再次按下键,然后光标将显示。与鼠标相同:您必须左键单击两次,之后光标将显示在第二个文本视图中。
以下是一个示例项目:https://www.dropbox.com/s/aw01oo0faajr4rn/Test.zip。我是从头开始的,当你点击Enter键时,它会放置第二个文本视图,你可以看到,即使在一个新的干净项目中也会出现这个问题。
答案 0 :(得分:1)
这看起来像苹果工程师的错误。在其他应用中发现了相同的行为。