Я делаю эту программу, которая имеет NSTableView с четырьмя столбцами, два из которых состоят из флажков.Я только сейчас пытаюсь заставить его работать, и я застрял.
Во-первых, вот мой соответствующий код:
- (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;
}
Как видите, я использую метод источника данныхдля этой таблицы, а не для привязок.В книге, которую я прочитал для Какао, есть несколько флажков с тегами, но я думаю, что они были в массиве, так что это может быть не лучшим решением.
В любом случае, когда я запусту это, отладчик покажет мнетег (который равен строке) вместе с состоянием кнопки (1 для всех из-за NSOnState).Моя проблема в том, что я не могу заставить флажки ставить и снимать флажки в зависимости от их состояния.Я прочитал этот вопрос: Флажок в столбце таблицы не регистрируется, щелкните
А затем ссылка на источник данных NSTableView.Согласно г-ну Ноцци в связанном вопросе, мне кажется, что нужен массив, содержащий состояния для ящиков, поэтому я попробовал это, установив [cell state]
для NSNumber, чтобы получить его в NSMutableArray.Я FUBAR сделал бы это и не думаю, что это было правильно.В этой таблице 454 строки (тэги переходят на 453 из-за массивов, начинающихся с 0) для всех четырех столбцов.
Мне также интересно, стоит ли помещать материал определения ячейки, который находится в tableview: setObjectValue:'пробуждение от Nib'.Я поставил ячейку с флажком в IB, но раньше у меня были проблемы с ней, поэтому я решил сделать это и программно.Во время всего этого у меня было и есть, у меня есть [myTableVeew reloadData]
в методе setObjectValue.
Помощь приветствуется, если нужна любая другая информация, я могу ее получить.