2012-11-21 122 views
2

我有一個類似於郵件應用程序的界面。左側帶有一列項目的表格視圖。當選擇左側的其中一個項目時,有關該項目的詳細信息顯示在右側。如何知道NSTableView何時完成(重新)加載其內容?

當我的應用程序中發生某些事件需要重新加載左表視圖中的數據時,當前選擇會丟失,然後正確的詳細視圖和左主視圖不同步。

我希望解決這個問題的方法是,當是時候重新加載表的數據,我將: 1.保存當前選擇的項目 2.重新加載表數據 3.處理委託方法或通知,讓我知道什麼時候重新加載完成。 4.通過在表中的新項目列表中找到適當的項目來重新選擇它。

不幸的是,我找不到任何方式來確定表完成重新加載。有沒有。任何方法來解決這個問題,或者b。這個問題更加優雅的解決方案?

謝謝。


更新:如果我的問題不清楚,想象你在郵件應用程序中,並且選擇了一些消息。該摘要單元格顯示爲在左側選定,並且該消息的詳細信息顯示在右側。假設新郵件出現在表格的頂部,並顯示爲新的單元格。您目前收看的留言是如何保留的,而不是取消選擇的?

+0

難道你不能簡單地在[yourTableView reloadData]調用之後選擇適當的單元格嗎? –

+0

不幸的不是(我也這麼認爲)。 reloadData只設置了一個位,表明表需要稍後重新加載表。它當時並不實際重新加載。所以問題是,我實際上並不知道重新加載何時完成。 –

+0

這聽起來很奇怪,也與Apple的文檔不一致。無論如何,請注意表格視圖只會重新顯示那些可見的行。 –

回答

3

reloadData是大錘的東西。 10.7提供了更好的解決方案。

除了使用reloadData以外,當您添加新行時,請使用insertRowsAtIndexes:withAnimation:。當您有要刪除的行時,請使用removeRowsAtIndexes:withAnimation:。當然,如果現有的行已經改變,則有reloadDataForRowIndexes:columnIndexes

這些應該記住你的選擇(至少,iOS的等價物)。

如果你不能以10.7爲目標,其他一些建議可能會有所幫助。 noteNumberOfRowsChanged也可能有幫助,但我沒有真正使用它。

相關問題