[ios] UICollectionView - L'immagine viene impostata in modo casuale


1 Answers

Il problema è dequeueReusableCellWithReuseIdentifier .

Quando si scorre UICollectionview cella viene riutilizzata, problema si aggiunge Collectionview all'interno di scrollview .

Prova questo dentro:

Scroll_View è la tua vista di scorrimento

la collezione è la tua collezione

-(UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    self.Scroll_View.contentSize = CGSizeMake(self.view.frame.size.width, collectionView.contentSize.height);
    CGRect fram_For_Collection_View = self.collection_view.frame;
    fram_For_Collection_View.size.height = collectionView.contentSize.height;
    self.collection.view.frame = fram_For_Collection_View;
}
Question

Sto usando collectionView nella mia app. Sto impostando l'immagine per la cella backgroundView in delegato didSeleziona. Ma quando seleziono una cella indexPath l'immagine viene impostata per 3 cella indexPath. Quando faccio scorrere la collezioneView le immagini vengono cambiate casualmente? Mi aiuti per favore. Grazie in anticipo.

- (void)viewDidLoad
{
    [super viewDidLoad];

    [collection registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:uio];
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:       (NSInteger)section
{
     return 50;
}

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

    UICollectionViewCell *cell = [collection dequeueReusableCellWithReuseIdentifier:uio
 forIndexPath:indexPath];
    cell.backgroundColor = [UIColor whiteColor];
   return cell;
}

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
 {
    NSLog(@"index %@",indexPath);
    UICollectionViewCell *cell = [collection cellForItemAtIndexPath:indexPath];

    cell.backgroundView =[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"download.jpg"]];

 }



Quello che sta succedendo è che UICollectionView riutilizza le celle. Quindi in didSelectItemAtIndexPath: si imposta lo sfondo della cella, ma UICollectionView riutilizza la stessa cella necessaria (e non si sta reimpostando il file cell.background in cellForItemAtIndexPath :).

Il modo per risolvere questo problema è mantenere un NSIndexSet delle celle selezionate. In didSelectItemAtIndexPath: puoi aggiungere l'indice dell'elemento che è stato selezionato, quindi forzare un ricaricamento di quell'elemento chiamando reloadItemsAtIndexPaths. Quindi, nel tuo cellForItemAtIndexPath: controlla il set di indici per vedere se l'indice selezionato è incluso, e in tal caso, imposta il backgroundView della cella.




Related