TableView中的indexPath比较

时间:2017-08-14 00:42:24

标签: ios objective-c uitableview

我将选定的indexPath存储在mutabledictionary`selectedRowsInSectionDictionary中,如下所示。

例如,在下面的字典中显示,第一部分是关键。在本节中,第一(1,0),第二(1,1)和第三(1,2)行已被选中并存储在字典中。

enter image description here

我正在尝试检查这些indexPath是否存储在cellForRowAtIndexPath委托方法的字典中,但它总是返回false。我想知道我做错了什么?

if([selectedRowsInSectionDictionary objectForKey:@(indexPath.section)] == indexPath)
{
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}

2 个答案:

答案 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");
}