Обновление флажков в NSTableView с помощью флажка «Выбрать все» - PullRequest
3 голосов
/ 11 ноября 2011

Последние пару недель я искал, читал, пробовал разные подходы и т. Д., Пытаясь решить эту проблему, но не повезло ... Любая помощь приветствуется.

У меня есть 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, которые касаются флажков в таблицах, но ни один из них на самом деле не касается этого.Опять же, любая помощь очень ценится.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Спасибо, Скотт

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...