2013-03-29 46 views
0

我有一個NSViewController包含一個基於視圖的表格視圖。當我初始化視圖控制器並將其視圖放在screent上時,表視圖會滾動到底部。我寧願將表視圖滾動到頂部。加載滾動NSTableView

我知道方法-scrollRowToVisible:,但我無法確定在哪裏調用它,以便表視圖首先滾動到頂部。我嘗試在NSViewController-loadView方法的末尾插入它,但顯然它不起作用,因爲表視圖還沒有加載它的行。

將電話打到-scrollRowToVisible:方法的最佳位置是什麼?或者,是否有一個屬性可以使表視圖顯示它的第一行而不是最後一行?

回答

0

我認爲這是一段路要走..

- 你應該叫滾動一旦所有的項目/錶行得到了加載/ TableView中

顯示 - 某處你會怎麼做reloadData,可能從筆尖清醒,這是不是一種阻斷的功能,它會調用一些UI代理功能,如

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)aTableColumn byItem:(id)item 

也許你應該檢查這裏的最後一個項目,可能有一些代表函數NSTableViewUIDelegate,whi ch告訴你什麼時候一個Item被加載/顯示在Table中,在那裏你可以檢查最後一個item,這意味着所有的表項都被加載,然後它的安全調用scrollToVisible

+0

謝謝你的工作。我最終把調用放在'-tableView:rowViewForRow:'中。我認爲把它放在任何委託方法中都會導致崩潰,因爲單元並沒有完全佈局,但它沒有完全佈局。再次感謝。 – Jacopo

+0

罰款...謝謝... – Amitg2k12

+2

沒有「NSTableViewUIDelegate」這樣的東西,而且你鏈接到了'UITableViewDelegate',這是錯誤的平臺。 –

0

這是一個老問題,但是對於記錄,因爲我今天遇到了這個問題:

表格視圖的NSScrollView開始滾動到底部,很可能是因爲上次關閉窗口後滾動視圖會恢復其最後滾動位置。

這是User Interface Preservation /狀態恢復功能的一部分。

爲了避免滾動視圖恢復滾動位置(事實上,任何東西),你也可以繼承NSScrollView和繼承這些:

class NonPreservingScrollView: NSScrollView { 

    override func encodeRestorableState(with coder: NSCoder) { 
     // Nothing 
    } 
    override func restoreState(with coder: NSCoder) { 
     // Nothing 
    } 
} 

也許不是試圖在重新加載數據必須跟蹤清潔了一下完成和滾動視圖不會移動時窗口加載...