Последние пару недель я искал, читал, пробовал разные подходы и т. Д., Пытаясь решить эту проблему, но не повезло ... Любая помощь приветствуется.
У меня есть NSTableView, которыйиспользует мой класс контроллера в качестве источника данных, точнее, NSMutableArray (validPropertyList) из NSDictionaries.У меня есть словари, содержащие один номер NSNumberWithBool с ключом @ "checkboxValue" и одну строку NSString с ключом @ "адрес".Первоначально я установил для всех checkboxValues значение YES.
for (int i =0; i<properties.count; i++) {
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:[properties objectAtIndex:i],@"address",[NSNumber numberWithBool:YES],@"checkboxValue", nil];
[validPropertyList addObject:dict];
}
В моей таблице 2 столбца, идентификаторы которых соответствуют именам ключей моих словарей.В IB я перетащил ячейку флажка в столбец «checkboxValues».Ниже приведены необходимые методы для таблицы.
-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView{
return [validPropertyList count];
}
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
NSString *identifier = [tableColumn identifier];
return [[validPropertyList objectAtIndex:row]valueForKey:identifier];
}
Все это работает отлично.Таблица загружает (выбранный) флажок в первом столбце и мой строковый объект в другом для каждого словаря в моем массиве.
Я реализовал описанный ниже метод для обработки изменений состояния флажков втаблица ...
-(void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:[validPropertyList objectAtIndex:row]];
[dict setValue:object forKey:@"checkboxValue"];
[validPropertyList replaceObjectAtIndex:row withObject:dict];
// NSLog (@ "val теперь% @", [[validPropertyList objectAtIndex: row] valueForKey: @ "checkboxValue"]);}
Похоже, это работает.Нажатие на флажок визуально меняет его состояние.Он также обновляет значение [NSNumber numberWithBool] в моем массиве, как и должно быть.
У меня есть флажок вне таблицы, который я пытаюсь использовать, чтобы выбрать все или отменить выбор всех флажков в таблице,У меня есть переменная bool (selectAllValue) в моем классе, которая связана с состоянием этого флажка, и этот флажок вызывает действие ниже ...
- (IBAction)selectAll:(id)sender {
if (selectAllValue == YES) {
for (int i=0; i<[validPropertyList count]; i++) {
NSMutableDictionary *dict = [validPropertyList objectAtIndex:i];
[dict setValue:[NSNumber numberWithBool:YES] forKey:@"checkboxValue"];
[validPropertyList replaceObjectAtIndex:i withObject:dict];
}
}
else{
for (int i=0; i<[validPropertyList count]; i++) {
NSMutableDictionary *dict = [validPropertyList objectAtIndex:i];
[dict setValue:[NSNumber numberWithBool:NO] forKey:@"checkboxValue"];
[validPropertyList replaceObjectAtIndex:i withObject:dict];
NSLog(@"new value in array when should be no is: %@",[validPropertyList objectAtIndex:i]);
}
}
[tv reloadData];
}
Это действительно устанавливаетвсе значения в моем массиве на правильные значения, а затем я вызываю [tv reloadData], чтобы обновить таблицу.Однако визуально значения флажков не изменяются.Это моя проблема.
Я пытался добавить флажки в свой словарь вместо NSNumbers, но без разницы.Я пытался привязать флажки в таблице к bool selectAllValue, но без разницы.
Я читал другие посты на SO, которые касаются флажков в таблицах, но ни один из них на самом деле не касается этого.Опять же, любая помощь очень ценится.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Спасибо, Скотт