解決此問題的一種方法是僅對前兩列使用綁定作品。對於其餘的列,您實現了一個實現所需定製邏輯的NSTableViewDataSource。
首先創建一個實現
-tableView:objectValueForTableColumn:row:
-tableView:setObjectValue:forTableColumn:row:
一個新的類(你只需要在第2,如果假設用戶編輯其他列)。然後添加一個
IBOutlet NSArrayController *valuesController;
該類的實例變量。
Inside Interface Builder添加該類的新對象(從庫中將藍色的「對象」多維數據集拖入文件的窗口中)。將陣列控制器連接到新的數據源。然後將數據源與表視圖連接起來,使其成爲表視圖的數據源。
確保過去前兩列的列不受任何約束。
的
-tableView:objectValueForTableColumn:row:
方法需要將調用這些列,你可以看看對象需要:
- (id)tableView:(NSTableView *)aTableView
objectValueForTableColumn:(NSTableColumn *)aTableColumn
row:(NSInteger)rowIndex;
{
NSObject *myObject = [[valuesController arrangedObjects] objectAtIndex:rowIndex];
id columnIdentifier = [aTableColumn identifier];
if ([columnIdentifier isEqual:@"foo"]) {
if ([myObject respondsToSelector:@selector(fooValue)]) {
return [myObject fooValue];
}
}
return nil;
}
注意如何我使用的列標識符,看看哪些列正在被請求。在Interface Builder中設置列標識符。