我将选定的indexPath
存储在mutabledictionary`selectedRowsInSectionDictionary中,如下所示。
例如,在下面的字典中显示,第一部分是关键。在本节中,第一(1,0),第二(1,1)和第三(1,2)行已被选中并存储在字典中。
我正在尝试检查这些indexPath
是否存储在cellForRowAtIndexPath
委托方法的字典中,但它总是返回false。我想知道我做错了什么?
if([selectedRowsInSectionDictionary objectForKey:@(indexPath.section)] == indexPath)
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
答案 0 :(得分:3)
[selectedRowsInSectionDictionary objectForKey:@(indexPath.section)]
是NSMutableArray
引用,而不是indexPath
,因此比较永远不会成真。
我建议您将NSMutableIndexSet
存储在字典中,而不是数组中。您的代码将类似于:
NSMutableIndexSet *selectedSet = selectedRowsInSectionDictionary[@(indexPath.section)];
if ([selectedSet containsIndex:indexPath.row] {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
使用'切换'添加/删除项目到词典。你会用:
NSMutableIndexSet *selectedSet = selectedRowsInSectionDictionary[@(indexPath.section)];
if (selectedSet == nil) {
selectedSet = [NSMutableIndexSet new];
selectedRowsInSectionDictionary[@(indexPath.section)] = selectedSet;
}
if ([selectedSet containsIndex:indexPath.row]) {
[selectedSet remove:indexPath.row];
} else {
[selectedSet add:indexPath.row];
}
答案 1 :(得分:2)
这是失败的,因为字典的值是一个数组。
据我所知
[selectedRowsInSectionDictionary objectForKey:@(indexPath.section)]
将返回包含3个元素的数组(NSIndexPaths)。 您应该能够将代码修改为以下内容:
if([[selectedRowsInSectionDictionary objectForKey:@(indexPath.section)] containsObject:indexPath]
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
我已通过以下测试代码确认了这一点:
NSIndexPath *comparisonIndexPath = [NSIndexPath indexPathForRow:2 inSection:0];
NSDictionary *test = @{ @(1): @[[NSIndexPath indexPathForRow:1 inSection:0],
comparisonIndexPath,
[NSIndexPath indexPathForRow:3 inSection:0]]};
NSArray *indexPathArray = [test objectForKey:@(1)];
if ([indexPathArray containsObject:comparisonIndexPath]) {
NSLog(@"Yeeehawww, let's do some stuff");
}