2010-01-11 16 views
1

我有一個NSTableView顯示(通過綁定)來自NSTreeController的數據。應用程序經常將數據附加到/將數據更改到綁定數組中。NSTableView。如何覆蓋自動滾動行爲?

問題是,如果用戶選擇了表格中的一行,但已滾動以便所選數據不再可見,那麼當應用程序更新數組時,它會使顯示器自動滾動,以便所選線再次在屏幕上。這對用戶來說非常令人沮喪,尤其是因爲新數據可以隨時到達。

有什麼辦法可以禁用這個功能嗎?

回答

2

您可能必須繼承子類NSTableView並覆蓋-scrollRowToVisible:,暫時將呼叫包含在super中。這可能還需要在您的子類中使用自定義的BOOL ivar來跟蹤您是否要滾動。

我會從那裏設置一個斷點開始,看看自動滾動的觸發時間。這應該有助於找到切換伊娃的適當時機。

+0

據我所知,Costique的解決方案是目前解決此問題的唯一方法。這是不幸的,因爲如果你簡單地覆蓋'-scrollRowToVisible:'而不調用super的實現,其他事情就會中斷。在我的情況下,我不得不修改我的網絡代碼以添加類方法'+ isInsertingNewDataFromRemote',然後讓我的定製表視圖在'-scrollRowToVisible:'內檢查該標誌,並且只在該標誌爲'NO'時才調用超級實現。 – Mason 2012-01-23 05:24:31

0

您是否用NSTreeControllerNSOutlineViewNSArrayControllerNSTableView?使用NSTreeControllerNSTableView對我來說沒有多大意義?

如果您使用的是NSTableView,則應該使用NSArrayController來管理其數據,並且這種行的重新排列是NSArrayController的一項功能。嘗試在IB內關閉控制器上的自動重新排列內容選項。

當它打開時,數組控制器將重新排列對象的添加,刪除和更改,這些對象會影響排序順序(如果有的話)並導致任何表視圖或大綱視圖重新加載其數據。

我不知道NSTreeController的一個類似功能,主要是因爲我沒有使用它,因爲它對我來說工作不好。不幸的是,我建議只使用NSOutlineView的數據源方法,並以傳統的方式提供數據。根據我的經驗,NSTreeController只適合最瑣碎的任務。

+0

NSTreeController在10.7中有很大提升;現在比以前的版本更有用。 – Mason 2012-01-23 05:29:15