這很簡單真的,一旦你瞭解它訪問陣列(當然!)。您不能直接將NSArray用作表格源。您需要創建一個自定義對象來實現NSTableViewDataSource或在某個現有類中實現該協議 - 通常是一個控制器。如果您使用Xcode創建基於標準文檔的應用程序,那麼文檔控制器類(它將被稱爲MyDocument)是一個很好的類。
您需要實現至少這兩種方法:
– numberOfRowsInTableView:
– tableView:objectValueForTableColumn:row:
如果你有一個可變的數組,其值你想在一個表視圖中使用與一列,類似下面應該做的開始:
– numberOfRowsInTableView: (NSTableView*) aTableView
{
return [myMutableArray count];
}
– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex
{
return [myMutableArray objectAtIndex: rowIndex];
}
它剛剛發生,我認爲你可以在上面兩種方法添加爲一個類別的NSArray更換myMutableArray
與self
,然後你可以使用數組作爲數據源。
反正有可變數組,重要的是你改變它任何時候,你需要讓表視圖知道它已經改變了,所以你需要發送的表視圖-reloadData
。
如果你的表視圖有多個列,你想用你的數組中的對象的屬性來填充它,有一個竅門,你可以做,使之更容易爲自己。比方說,你的數組中的對象是定義了一個名爲人用兩種方法的類的實例:
-(NSString*) givenName;
-(NSString*) familyName;
,你希望你的表視圖,以對每個那些一列,可以設置每列的identifier
財產對財產的人的名稱該列顯示和使用類似以下內容:
– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex
{
Person* item = [myMutableArray objectAtIndex: rowIndex];
return [item valueForKey: [tableColumn identifier]];
}
如果用valueForKeyPath:
替換valueForKey:
和您的Person類也有以下方法:
-(Person*) mother;
-(Person*) father;
-(NSString*) fullName; // concatenation of given name and family name
您可以添加具有以下標識符的表格列:father.fullName
或mother.familyName
,這些值將自動填充。
此鏈接不工作!請更新它! – elin3t 2015-04-17 18:36:36