删除除选定的UICollectionView索引之外的所有索引

时间:2015-04-02 05:15:32

标签: ios objective-c

我正在尝试删除数据源的所有索引,但选择的索引除外。继承人我正在使用的代码。

 -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
    {

            NSMutableIndexSet *indexesToDelete = [NSMutableIndexSet indexSet];
            NSUInteger currentIndex = 0;
            for (NSIndexPath *cellIndexes in collectionView.indexPathsForVisibleItems)
            {
                if (cellIndexes.row != indexPath.row)
                {
                    [indexesToDelete addIndex:currentIndex];
                }
                currentIndex++;
            }
            [self.searchUsers removeObjectsAtIndexes:indexesToDelete];
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)];
        [self.tableView reloadSections:indexSet withRowAnimation:UITableViewRowAnimationFade];
        }];
    }

我的集合视图在我的tableView中,所以我在重新加载tableView时重新加载数据。

我使用indexDelete逻辑得到的错误是我的“indexesToDeleteNSMutableIndexSet总是为零。当然,我不能向removeObjectsAtIndexes

发送一个零对象

我似乎无法弄清楚我的逻辑有什么问题。有任何想法吗?

编辑:我似乎没有改变任何东西,但不是我没有崩溃,但它正在删除错误的索引。

2 个答案:

答案 0 :(得分:0)

表和集合视图的IndexPaths有两个部分用于section和row,它们不是整数。而不是使用整数currentIndex,只需将cellIndexes添加到数组(而不是mutableIndexSet),

NSMutableArray *indexesToDelete = [NSMutableArray new];

for (NSIndexPath *cellIndexes in collectionView.indexPathsForVisibleItems){
    if (cellIndexes.row != indexPath.row) {
        [indexesToDelete addObject:cellIndexes]; // it would be better to call this variable cellIndex since it's a single index
    }      
 }

答案 1 :(得分:0)

我正在删除枚举的索引。只需要获取未选中单元格的索引。糟糕

   NSMutableIndexSet *indexesToDelete = [NSMutableIndexSet indexSet];
        for (NSIndexPath *cellIndexes in collectionView.indexPathsForVisibleItems)
        {
            if (cellIndexes.row != indexPath.row)
            {
                [indexesToDelete addIndex:cellIndexes.row];
            }
        }

        [self.searchUsers removeObjectsAtIndexes:indexesToDelete];
        NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)];
        [self.tableView reloadSections:indexSet withRowAnimation:UITableViewRowAnimationFade];