我有一個自定義NSTableView子類綁定到一個數據源(NSArray)異步更新。當項目添加到數組時,行會自動添加到tableview中。真棒!如何檢測NSTableView中的行數已更改?
我的問題是:我如何檢測到這個魔術發生了,以便我可以執行一些與我的自定義tableview顯示相關的其他任務?有沒有一種方法,我可以在我的子類中重寫將更新tableview時將被調用?
我有一個自定義NSTableView子類綁定到一個數據源(NSArray)異步更新。當項目添加到數組時,行會自動添加到tableview中。真棒!如何檢測NSTableView中的行數已更改?
我的問題是:我如何檢測到這個魔術發生了,以便我可以執行一些與我的自定義tableview顯示相關的其他任務?有沒有一種方法,我可以在我的子類中重寫將更新tableview時將被調用?
您不需要根據行數繼承NSTableView以更改其高度。在您的控制器中,只需使用KVO監視數據陣列,並在添加或刪除行時調整tableview滾動視圖的框架大小(您可以使用enclosingScrollView
找到它)。我之前使用過這種技術,它運行良好。您可以使用tableview的rowHeight
和intercellSpacing
方法來計算幀的高度。
對這個解決方案的日子看起來高和低。它像魅力一樣工作,謝謝!下面是我的其他代碼示例:
// 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];
你能解釋一下你的子類需要做什麼嗎?通常當你操縱一個tableview時,你會使用它的委託,一個自定義的單元格或表格列,或者重寫一個tableview的繪圖方法。我很難想出一個與你所問的相關的例子。 – 2008-11-20 03:33:10
夠公平的。我想根據它包含的行數來調整tableview的高度。當它達到一定的限制時(假設有10行),我將允許它滾動,但對於1-9行,我只是希望它在屏幕上長高。 – 2008-11-20 03:43:34