Один из способов решить эту проблему - использовать привязки только для первых двух столбцов, в которых он работает. Для остальных столбцов вы реализуете NSTableViewDataSource, который реализует необходимую пользовательскую логику.
Сначала создайте новый класс, который реализует
-tableView:objectValueForTableColumn:row:
-tableView:setObjectValue:forTableColumn:row:
(2-й нужен только в том случае, если пользователь должен редактировать другие столбцы). Затем добавьте
IBOutlet NSArrayController *valuesController;
переменная экземпляра для этого класса.
Внутри Interface Builder добавьте новый объект этого класса (перетащите синий кубик «объект» в окно файла из библиотеки). Подключите контроллер массива к новому источнику данных. Затем соедините источник данных с табличным представлением, чтобы сделать его источником данных табличного представления.
Убедитесь, что столбцы после первых двух не связаны ни с чем.
The
-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;
}
Обратите внимание, как я использую идентификатор столбца, чтобы увидеть, какой столбец запрашивается. Установите идентификатор столбцов в Интерфейсном Разработчике.