2008-11-20 20 views
2

我有一個自定義NSTableView子類綁定到一個數據源(NSArray)異步更新。當項目添加到數組時,行會自動添加到tableview中。真棒!如何檢測NSTableView中的行數已更改?

我的問題是:我如何檢測到這個魔術發生了,以便我可以執行一些與我的自定義tableview顯示相關的其他任務?有沒有一種方法,我可以在我的子類中重寫將更新tableview時將被調用?

+0

你能解釋一下你的子類需要做什麼嗎?通常當你操縱一個tableview時,你會使用它的委託,一個自定義的單元格或表格列,或者重寫一個tableview的繪圖方法。我很難想出一個與你所問的相關的例子。 – 2008-11-20 03:33:10

+0

夠公平的。我想根據它包含的行數來調整tableview的高度。當它達到一定的限制時(假設有10行),我將允許它滾動,但對於1-9行,我只是希望它在屏幕上長高。 – 2008-11-20 03:43:34

回答

5

您不需要根據行數繼承NSTableView以更改其高度。在您的控制器中,只需使用KVO監視數據陣列,並在添加或刪除行時調整tableview滾動視圖的框架大小(您可以使用enclosingScrollView找到它)。我之前使用過這種技術,它運行良好。您可以使用tableview的rowHeightintercellSpacing方法來計算幀的高度。

2

對這個解決方案的日子看起來高和低。它像魅力一樣工作,謝謝!下面是我的其他代碼示例:


// tv = NSTableView 
// view = NSView 

int height = ([tv rowHeight] + [tv intercellSpacing].height) * [itemNodes count]; 

NSScrollView *sv = [tv enclosingScrollView]; 

NSRect svFrame = [sv frame]; 
svFrame.size.height = height; 
[sv setFrame:svFrame]; 

NSRect viewFrame = [view frame]; 
viewFrame.size.height = height; 
[view setFrame:viewFrame];