使用A"选择全部"更新NSTableView中的复选框复选框

时间:2011-11-11 04:45:06

标签: cocoa nstableview

在过去的几周里,我一直在寻找,尝试不同的方法等,试图解决这个问题,但没有运气......任何帮助都表示赞赏。

我有一个NSTableView,它使用我的控制器类作为它的数据源,NSDictionaries的NSMutableArray(validPropertyList)更精确。我的字典中包含一个带有@“checkboxValue”键的NSNumber numberWithBool,以及一个带有@“address”键的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上与表格中的复选框相关的其他帖子,但没有一个真正解决这个问题。再次,非常感谢任何帮助。

如果您需要更多信息,请与我们联系。

由于 斯科特

0 个答案:

没有答案