gpt4 book ai didi

macos - 10.11 及更高版本中 NSLayoutManager 的奇怪变化

转载 作者:行者123 更新时间:2023-12-03 17:09:32 27 4
gpt4 key购买 nike

当 NSTextView 仅选择文本字形而不选择任何缩进或整个 NSTextContainer 大小(如默认 NSTextView 的行为)时,我的目标是使文本选择行为类似于 Apple Pages、MS Word 和任何其他文本处理器。

考虑到这个目标,我将 NSLayoutManager 子类化并重写 func rectArray(forCharacterRange charRange: NSRange, withinSelectedCharacterRange selCharRange: NSRange, in container: NSTextContainer, rectCount: UnsafeMutablePointer<Int>) -> NSRectArray?

在我的覆盖中,我只是计算了仅绑定(bind)字形并拒绝任何缩进、空格等的新矩形。

一切顺利。但突然在 macOS 10.11 中,Apple 确实弃用了我正在使用的方法。并建议使用func enumerateEnclosingRectsForGlyphRange: withinSelectedGlyphRange: inTextContainer: usingBlock:相反。

但是这个新方法似乎不像之前已弃用的方法那样工作。不可能再自定义封闭的矩形了。我所能做的就是枚举 TextKit 计算过的矩形。现在不可能实现理想的文本选择行为,因为矩形是只读的。顺便说一句,新方法根本不会被 TextKit 调用。所以我没有必要考虑这个。

我应该做什么?

最佳答案

虽然对非等效方法替换的惊讶仍然存在,但我找到了解决方案。

原来我不需要rectArrayForCharacterRange完成这项工作的方法。我刚刚覆盖了func fillBackgroundRectArray(_ rectArray: UnsafePointer<NSRect>, count rectCount: Int, forCharacterRange charRange: NSRange, color: NSColor)并将我的直接计算结果放在那里。

现在一切都很顺利!

关于macos - 10.11 及更高版本中 NSLayoutManager 的奇怪变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44842269/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com