Я делаю эту программу с NSTableView с четырьмя столбцами, две из которых сделаны из флажков. Я только пытаюсь заставить работать сейчас, и я застрял.
Во-первых, здесь мой соответствующий код:Получение флажков для отражения их состояния в NSTableColumn
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView {
NSString *filePathThree = [[NSBundle mainBundle] pathForResource:@"mydictionary" ofType:@"plist"];
NSData *myDataThree = [[NSData alloc]initWithContentsOfFile:filePathThree];
self.flozzCodeAndName = (NSMutableDictionary *)[NSPropertyListSerialization
propertyListFromData:myDataThree
mutabilityOption:NSPropertyListMutableContainersAndLeaves
format:NULL
errorDescription:NULL];
return [[flozzCodeAndName objectForKey:@"name"] count];
}
- (void)tableView:(NSTableView *)tableView
setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)rowIndex
{
NSButtonCell *cell;
cell = [[NSButtonCell alloc] init];
[cell setButtonType:NSSwitchButton];
[cell setTitle:@""];
[cell setTag:rowIndex];
NSLog(@"%d", [cell tag]);
[cell setCellAttribute:NSCellEditable to:3];
[cell setImagePosition:NSImageOnly];
[cell setState:NSOnState];
NSLog(@"%d", [cell state]);
[havzColumn setDataCell:cell];
[myTableVeew reloadData];
[cell release];
}
- (id)tableView:(NSTableView *)aTableView
objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {
NSString *filePathThree = [[NSBundle mainBundle] pathForResource:@"mydictionary" ofType:@"plist"];
NSData *myDataThree = [[NSData alloc]initWithContentsOfFile:filePathThree];
self.flozzCodeAndName = (NSMutableDictionary *)[NSPropertyListSerialization
propertyListFromData:myDataThree
mutabilityOption:NSPropertyListMutableContainersAndLeaves
format:NULL
errorDescription:NULL];
NSArray *myArray = [flozzCodeAndName objectForKey:[aTableColumn identifier]];
NSString *myStringValue = [myArray objectAtIndex:rowIndex];
return myStringValue;
}
Как вы можете видеть, я использую метод источника данных для этой таблицы, а не привязок. Книга, которую я прочитал для Cocoa, сделала некоторые флажки с тегами, но я думаю, что они были в массиве, так что это может быть не самое лучшее.
В любом случае, когда я запустил это, отладчик покажет мне тег (который равен строке) вместе с состоянием кнопки (1 для всех из-за NSOnState). Моя проблема заключается в том, что я не могу получить поля для проверки и снятия галочки в зависимости от их состояния. Я прочитал этот вопрос: Checkbox on table column won't register click
И затем ссылка на источник данных NSTableView. По словам г-на Ноцци в связанном вопросе, мне кажется, что нужен массив, содержащий состояния для ящиков, поэтому я попробовал это, установив [cell state]
в NSNumber, чтобы получить его в NSMutableArray. Я FUBAR'd это и не думаю, что это было правильно. В этой таблице 454 строки (теги идут до 453 из-за массивов, начинающихся с 0), для всех четырех столбцов.
Я также задаюсь вопросом, должен ли я помещать элементы определения ячейки, которые находятся в tableview: setObjectValue: в 'awakeFromNib'. Я поместил ячейку ячейки флажка в IB, но раньше у меня были проблемы с этим, поэтому я решил сделать это программно. Во всех этих случаях я сделал и все еще имею [myTableVeew reloadData]
в методе setObjectValue.
Помощь приветствуется, если какая-либо другая информация необходима, я могу ее получить.