2013-12-18 3 views
1

Я пытаюсь выбрать ячейку в UICollectionView, она выбирается, но при прокрутке вниз она выбирает другую ячейку внизу и прокручивает вверх, показывая некоторые другие, которые нужно выбрать.Collection View изменяет выбранную ячейку при прокрутке

Ниже код, который я использую didSelectItemAtIndexPath

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

    cell = (CustomCollectionCell *)[collectionView cellForItemAtIndexPath:newIndex]; 

    NSString *strId = [[masterArray valueForKey:@"id"]objectAtIndex:indexPath.row]; 


    NSString *tempIndexRow = [NSString stringWithFormat:@"%ld",(long)indexPath.row]; 

    NSLog(@"%@, %@,%d ,%@, %d", strId,tempIndexRow,cell.imageView.tag,[boolArray objectAtIndex:indexPath.row],indexPath.row); 

    if (strId && [[boolArray objectAtIndex:indexPath.row] isEqualToString:@"False"] && cell.imageView.tag == indexPath.row) { 

     cell.selectedImage.image = [UIImage imageNamed:@"select.png"]; 

     [boolArray replaceObjectAtIndex:indexPath.row withObject:@"True"]; 
    } 
    else{ 
     cell.selectedImage.image = Nil; 

     [boolArray replaceObjectAtIndex:indexPath.row withObject:@"False"]; 
    } 
} 

Это то, что я выбираю впервые

enter image description here

Это то, что я получаю, когда я прокручиваю вниз

enter image description here

Благодаря

+0

же, как Tableview вам нужно сохранить где-то, какая ячейка была выбрана, и в этом методе «- (UICollectionViewCell *) CollectionView: (UICollectionView *) CollectionView cellForItemAtIndexPath: (NSIndexPath *) indexPath "управлять изображением – Leena

ответ

7

Вы должны установить выбранный индекс пункт магазин, чтобы один массив и в cellForRowIndex время проверить этот индекс массива с indexPath.row как ниже: -

selectedCellsArray Alloc этот массив в ViewDIdLoad методом

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    cell = (CustomCollectionCell *)[collectionView cellForItemAtIndexPath:newIndex]; 
    if ([selectedCellsArray containsObject:[NSString stringWithFormat:@"%d",indexPath.row]] ) 
      { 
       [selectedCellsArray removeObject:[NSString stringWithFormat:@"%d",indexPath.row]]; 
       cell.selectedImage.image = Nil; 


      } 
      else 
      { 
       [selectedCellsArray addObject:[NSString stringWithFormat:@"%d",indexPath.row]]; 
       cell.selectedImage.image = [UIImage imageNamed:@"select.png"]; 
      } 
} 

и

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
     NSNumber *rowNsNum = [NSNumber numberWithUnsignedInt:indexPath.row]; 
     if ([selectedCellsArray containsObject:[NSString stringWithFormat:@"%@",rowNsNum]] ) 
     { 
      cell.selectedImage.image = [UIImage imageNamed:@"select.png"]; 


     } 
     else 
     { 
      cell.selectedImage.image = Nil; 
     } 
} 
+0

Спасибо человеку! Вы сделали мой день :) –

0

It не выбирает другую ячейку. Проблема, скорее всего, из-за повторного использования ячеек и не правильной их повторной инициализации, когда они возвращаются на экран. Когда ячейки не видны, он выгружается для сохранения памяти.

Так лучше проверить эту Condtion, а в cellForItemAtIndexPath источника данных

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 

    { 

     //You cell initialization code. 

     if ([[boolArray objectAtIndex:indexPath.row] isEqualToString:@"True"]) { 

      cell.selectedImage.image = [UIImage imageNamed:@"select.png"]; 
     } 
     else{ 
      cell.selectedImage.image = Nil; 
     } 
    } 
Смежные вопросы