2015-04-02 72 views
1

我试图删除除选定的数据源之外的所有索引。下面是我使用的代码。删除除选定的所有索引UICollectionView索引

-(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逻辑得到的错误是我的'indexesToDelete'NSMutableIndexSet总是零。当然我不能发送一个零对象removeObjectsAtIndexes

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

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

+0

您的tableview显示的值是从NSObject或Just Strings中获取的每一行吗? – Vidhyanand 2015-04-02 05:21:58

回答

0

表和集合视图的IndexPath对于该部分和行有两个部分,它们不是整数。代替使用该整数的,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 
    }  
} 
+0

刚刚意识到这一点,但它需要是一个索引集才能执行removeObjectsAtIndexes方法。没有? – Andy 2015-04-02 05:29:29

0

我在枚举的索引中删除。只需要抓取非选定单元格的索引。 oops

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];