NSTextView逐行滚动

时间:2012-07-31 11:06:21

标签: cocoa scroll nstextview

当使用“向上”和“向下”键在文本视图中从一行移动到另一行时,它表现出这种滚动行为 - 当光标位于最顶部并且我点击“向上”(反之亦然)时,它会滚动文档半页面,也就是说,当前行现在位于textview的中间。

是否可以禁用此行为?是否可以只滚动一行?那么当前行始终位于顶部(或底部)?

2 个答案:

答案 0 :(得分:1)

NSTextView(通过NSText)有一个名为-scrollRangeToVisible:的方法。考虑子类化NSTextView并重写-scrollRangeToVisible以直接指定您自己的滚动行为。

如果您需要更具体的帮助以确保行为正确,请发布一个单独的问题,准确指出您想要的行为以及您尝试获取该行为的代码。

答案 1 :(得分:1)

我知道我来晚了一点,但由于这个问题没有得到妥善回答,我会试一试。 我遇到了与NSTextViews相同的问题。当使用-scrollRangeToVisible将插入位置带到视图的可见矩形时,它有滚动的习惯,将插入符号放在屏幕的(垂直)中间。 我所做的是使用[NSView scrollRectToVisible],因为它滚动了将rect放到视图的可见矩形所需的最小距离:

NSRange caretRng = NSMakeRange(caretLocation, 0);
NSLayoutManager* lm = [view layoutManager];
NSRange glyphRange = [lm glyphRangeForCharacterRange:caretRng actualCharacterRange:nil];
NSRect glyphRect = [lm boundingRectForGlyphRange:glyphRange inTextContainer:[view textContainer]];
[view scrollRectToVisible:glyphRect];

希望它有所帮助!