2015-05-27 20 views
16

我有一個基於視圖短信NSTableView的簡單的聊天應用程序,你可以看到下面的圖片。 enter image description here 每個消息都包含NSTextView實例,該實例具有適合所有文本的高度。如何調用NSScrollView自動滾屏,方法程序

所有我需要的是啓動NSScrollView(其中NSTableView的實例是由附後)自動滾動,而用戶選擇文本拖動鼠標遠遠不夠。不幸的是,自動滾動不會出現。如果在文本視圖之外的某處拖動都會成功。

席力圖召autoscroll: - 方法直接通過簡單地從NSTextView -subclass推NSEvent -instance「鼠標拖動」 -event(例如像從this article):

- (void)mouseDragged:(NSEvent *)event 
{ 
    [self.scrollView autoscroll:event]; 
} 

正如我壓倒一切鼠標事件並實現所有文本選擇,這個方法通常會調用。但自動滾動似乎不起作用。

UPDATE

我想通了,打電話-autoscroll:之前 - 方法必須有同一對象的-mouseDown:。但它打破了我的文本選擇機制。即使不是第一響應者,也只有mouseDown:-方法。

+0

如果你是說用NSScrollView內一個NSTableView和NSTableView的行是多行,小區內選擇文本,並拖累滾動視圖的底部之下時,不滾動?如果是這樣,該功能由NSScrollView自動提供,選擇時不需要滾動。爲了測試,我創建了一個新項目,添加了NSScrollView(NSTableView),將行高設置爲大於滾動視圖並填充tableview。點擊文字,然後選擇向下滾動瀏覽的底部。它自動滾動。 – Jay

+0

@Jay我需要啓動NSTableView滾動視圖自動滾動,而不是文本視圖的一個(文本視圖的高度足以適應文本)。 – Astoria

+0

我不確定你在問什麼。假設你從對象庫中將NSTableView吸收到Xcode的窗口中,NSTableView將被NSScrollview包圍。如果您嘗試通過在文本所在的行中單擊鼠標並向下拖動(這是它從屏幕快照中顯示的方式)來選擇表格視圖中某一行中的文本,則封閉的NScrollView會自動處理它,並向上滾動你可以繼續選擇文本 – Jay

回答

2

通常,文本視圖位於其自己的滾動視圖內。即使這樣足夠大而無需滾動顯示所有文本,它仍然存在。對該滾動視圖(可能包括該滾動視圖本身?)中的任何內容調用-autoscroll:將只嘗試滾動該滾動視圖,而不是包含表視圖的滾動視圖。

嘗試在層級視圖上漲調用-autoscroll:self.scrollView.superview,表格單元格視圖或表格視圖。

但是請注意,該表視圖的滾動視圖將保持甚至包含文本視圖中的單元格視圖後滾動完全在屏幕上。事實上,它可能會保持滾動,以至於它在另一個方向上離開屏幕。基本上,它不知道你試圖在文本視圖中進行選擇,所以當選擇一直延伸到文本視圖的邊緣時,它不知道要停止。

另一種方法可能是嘗試使用「裸」文本視圖沒有封閉滾動視圖。我不認爲IB會讓你這樣做,所以你必須以編程的方式來做。儘管如此,裸文本視圖在自動佈局中表現不佳。

+0

使用'-mouseDragged:'參數取得的事件調用'-autoscroll:'(在表視圖或其包含的滾動視圖上)不會產生任何結果。可能是我應該改變'NSEvent'莫名其妙。 – Astoria