2012-07-31 51 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