在过去的几周里,我一直在寻找,尝试不同的方法等,试图解决这个问题,但没有运气......任何帮助都表示赞赏。
我有一个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上与表格中的复选框相关的其他帖子,但没有一个真正解决这个问题。再次,非常感谢任何帮助。
如果您需要更多信息,请与我们联系。
由于 斯科特