2012-11-06 57 views
0

我需要以編程方式創建/使用NSTableView。從文檔看來,我會實現NSTableViewDataSource協議。但功能tableView:objectValueForTableColumn:row:建議(由於行索引),我將不得不手動照顧排序。是對的嗎?此外,由於每次重新顯示時都會調用此函數,因此我可能會很慢,因爲我正在使用Python,並且這意味着每個行/列都需要Python調用。以編程方式使用NSTableView

我想知道使用Cocoa binding和wether會更簡單嗎?無論如何,我將不得不以編程的方式來做這件事,而且我對於如何做到這一點有點茫然。從其他例子中,我想我會創建一個NSArrayController並以某種方式將它們綁定在一起。

另外,我想讓它在較舊的MacOSX上工作,所以我想我必須使用基於單元的NSTableView,無論如何。

數據源將是靜態的,不可編輯,即我可以只提供一個NSArray數據。

回答

0

有三種使用NSTableView的方法:1)委託方法; 2)NSArrayController;或3)綁定。我最好的建議是在嘗試在python中執行此操作之前,首先在Cocoa ObjC項目中的Xcode中學習所有這三個方法。注意:我還建議你首先學習如何通過nib來完成這些操作,然後找出如何以編程方式執行它(再次在Cococa ObjC項目上的Xcode中,然後再嘗試使用python)。

如果您瞭解Interface Builder(在Xcode 4中的視圖,app pre-Xcode4)綁定的工作方式,那麼對於以下代碼「綁定到」對應於myController,「Controller Key」將是「選擇」,而Model Key路徑將是「fullPath」。

[MyView的綁定:@ 「valuePath」 toObject: myController的withKeyPath:@ 「selection.fullPath」 選項:無];

+0

爲什麼?我曾經看過很多這樣的NIB文件,但是我總是覺得我並沒有真正學到這麼多東西。我真的很想看到相關的源代碼。 (Python或ObjC無關緊要。) – Albert

+0

因爲如果你不明白它在ObjC中的工作原理,當真正的問題可能出現在它的嘗試中時,你將花費大量的時間來顛覆你的Python技能ObjC呢。 – geowar

+0

我想我已經完全理解委託方法是如何工作的。其實,這也是我目前的實現(使用Python)。 - 我會猜測使用NSArrayController也意味着使用綁定。我在NIB文件中看到過。但要真正學習/理解它,我想看到一些相關的源代碼。這實際上是我的問題。我不在乎源代碼是否在ObjC或Python中。 – Albert

0

您只需要對數組進行一次排序,然後調用委託方法訪問數組中的相應索引。

你真的應該有一個很好的Table View Programming Guide閱讀。

相關問題