【发布时间】:2021-07-25 03:31:14
【问题描述】:
我将NSTextView 实例垂直堆叠,例如:
The quick brown fox
jumps over the lazy dog
Jackdaws love my big
sphinx of quartz
我需要使用向上/向下箭头在它们之间移动。例如,当光标位于“lazy”中的l之后并且用户按下向下箭头时,光标应该在“my”中的y之后直接跳转——就像这些句子在同一个文本视图中一样。
默认情况下,当光标位于最后一行时按下向下箭头时,文本视图会将其移动到该行的末尾。虽然我可以在NSTextViewDelegate 中使用textView(_:doCommandBy:) 来检测“向下箭头”选择器并覆盖默认行为,但存在两个问题:
-
我可以通过
selectedRanges属性获取光标的位置,然后检查该位置之后的换行符来确定光标是否在最后一行,但无法知道它是否在最后一行 wrapped 行,即在当前文本视图的边框附近。 -
我需要知道光标的 X 坐标,以便将其放置在另一个文本视图中大致相同的 X 坐标处(字体不一定是固定宽度的,所以我不能依赖字符数)。
我想它们都可以通过NSLayoutManager 解决,但我无法理解所有可用的方法。
【问题讨论】:
-
@Willeke 部分是的,谢谢!我想我会尝试将
boundingRect(forGlyphRange:in:)与characterIndexForInsertion(at:)结合起来并回答我自己的问题。
标签: cocoa nstextview nslayoutmanager