2013-06-18 2 views
0

Я создал UICollectionView с некоторыми ячейками в нем, и он отобразился правильно, теперь я хочу установить выделенный тег для одной или нескольких ячеек, в пользовательской ячейке, я могу использовать два способа его реализации :set selected tag для collectionView

способ 1: установить selectedBackgoundView

self.selectedBackgroundView = backgroundView; 

способ 2: добавить UIImageView в качестве выбранного тега

[_coverImageView addSubview:_selectImageView]; 
//coverImageView is image for cell, 
//selectImageView is a tag imageView for selected. 

й ru проблема возникает:

Например, я выбрал первую ячейку. Когда я прокручиваю UICollectionView, путь 1 все еще отображает первую ячейку, но с образом 2, _selectImageView будет добавлен в другую ячейку.

Я знаю, что это вызвано Reuse Cell, но понятия не имеет о сделке с ним.

ответ

0

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

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

+0

Я использовал пользовательские ячейки, а не работу. – Mil0R3

+0

Почему вы не используете код, который используете для создания своих ячеек? – lxt

0

Недавно я работаю над аналогичным проектом. Хотя это давно, но я надеюсь помочь кому-то, кто в этом нуждается.

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

MyCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:collectionCellID forIndexPath:indexPath]; 
if (cell == nil) { 
    cell = [[MyCollectionViewCell alloc]init]; 
} 
//Change Selected State 
if([[collectionView indexPathsForSelectedItems] indexOfObject:indexPath] != NSNotFound){ 
    UIView *bgView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 250, 250)]; 
    bgView.backgroundColor = kLightBlueColor; 
    [cell setSelectedBackgroundView:bgView]; 
    cell.selected = YES; 
} 
cell.title.text = @"Hello World"; 

return cell; 
}