2015-03-17 9 views
0

У меня есть UICollectionView. Когда пользователь нажимает на ячейку, цвет ячейки меняется на красный. Я закодировал вышеуказанную часть, и она работает отлично.CollectionView Основные моменты Неправильная ячейка при прокрутке

Однако, когда я прокручиваю ниже, другие ячейки в виде коллекции подсвечиваются красным цветом. Я уверен, что он не был выбран, а только выделен.

Как я могу это решить.

Мой код выглядит следующим образом:

cellForItemAtIndexPath Метод

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

    static NSString *CellIdentifier = @"cell"; 

    ViewCell *vc = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath]; 

    vc.vciv.image = [arrayOfImages objectAtIndex:indexPath.row]; 

    return vc; 

} 

didSelectItemAtIndexPath Метод

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

    if([items containsObject:allItem[indexPath.row]]){ 
     UICollectionViewCell *c =[collectionView cellForItemAtIndexPath:indexPath]; 
     c.backgroundColor = [UIColor clearColor]; 
    } else { 
     UICollectionViewCell *c =[collectionView cellForItemAtIndexPath:indexPath]; 
     c.backgroundColor = [UIColor redColor]; 
} 
+0

Вы должны следить за выбранный индекс и убедитесь, что вы установите цвет фона ячейки на красном или ясно 'cellForItemAtIndexPath' – Paulw11

ответ

1

Как просматривать коллекции клетки получают повторно, вы должны убедиться, Выделенная ячейка не выделена в cellForItemAtIndexPath: метод:

UICollectionViewCell *vc = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath]; 
vc.backgroundColor = [UIColor clearColor]; 

Этот код очищает фон ячейки всегда при удалении. Если вам нужно сохранить выделение, вам нужно сохранить ячейки indexPath s, которые вы хотите выделить, и проверить, находится ли текущая ячейка в этом списке.

EDIT

кажется, что ваша items переменная хорошо подходит для этого. Таким образом, вы должны сделать следующее:

UICollectionViewCell *vc = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath]; 
vc.backgroundColor = [items containsObject:allItem[indexPath.row]] ? [UIColor redColor] : [UIColor clearColor]; 
+0

Где вы хотите, чтобы я добавить код выше , Это в 'didSelectItemAtIndexPath'? – Illep

+0

Нет, в 'cellForItemAtIndexPath:' как я написал ;-) – Dennis

Смежные вопросы