2012-07-31 80 views
6

在textview中使用“向上”和“向下”键从一行移动到另一行时,它显示了这种滚动行为 - 当光标位于顶部并且我点击“向上”相反),它将文档向上滚动半页,也就是说,当前行位于textview的中间。NSTextView逐行滚动

是否可以禁用此行为?是否有可能使它只滚动一行?所以当前行总是保持在顶部(或底部)?

回答

1

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

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]; 

希望它能帮助!

+0

谢谢!但我应该在哪里把这个我的NSTextView子类?我明白'scrollRectToVisible:'滚动我想要的方式 - 问题是,NSTextView似乎调用'scrollRangeToVisible:' - 如何使它调用前一种方法? – 2013-02-21 15:21:56

+0

您是否尝试在您的NSTextView子类中重写ScrollRangeToVisible?在我的设置中,我重写了keyDown消息并手动执行插入运动,因此scrollRangeToVisible不会自动调用,我可以手动调用scrollRectToVisible,但应该这样做,但我不知道可能的副作用。 – Ibazan 2013-02-21 18:01:04

+0

它或多或少的作品!唯一的问题是,有时候,当我按住更长时间时,它会错过滚动几行,所以插入符号不在第一行/最后一行,但可能在下面2-3行。 – 2013-02-22 10:41:05

1

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

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

+0

谢谢你的回复。我在这个问题中已经指定了期望的行为。 – 2012-09-04 18:22:13