2015-04-02 98 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];