Réutilisé les cellules dans un UICollectionView afficher plusieurs UIImageViews quand ils ne devraient afficher un

Im ayant un problème avec mon UICollectionView. Initialement, il affiche fine, montrant une grille de cellules, chaque cellule avec un seul UIImageView. Ces UIImageViews montrent des Png avec de la transparence qui sont stockés dans l'application du bundle.

Mon problème est que, une fois la UICollectionView a fait défiler, certaines cellules semblent être endommagé.

Une corruption de la cellule affiche plusieurs images empilées les unes sur les autres, le plus haut de l'image est celle qu'il doit être visible, et les images ci-dessous sont celles qui devraient être utilisés dans d'autres cellules.

Ma meilleure supposition est que cela a quelque chose à voir avec la façon dont les cellules à l'intérieur d'un UICollectionView sont réutilisés, mais je suis ouvert aux suggestions.

C'est le délégué code que j'utilise pour la création de cellules au sein de la UICollectionView:

//creates the individual cells to go in the menu view
- (UICollectionViewCell*) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    //create collection view cell
    UICollectionViewCell * cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];

    //create a uiview where we can place all views that need to go into this cell
    UIView * contents=[[UIView alloc] initWithFrame:cell.contentView.bounds];
    [contents setBackgroundColor:[UIColor clearColor]];
    [cell.contentView addSubview:contents];

    //add a button image
    NSString * buttonPath=[[NSBundle mainBundle] pathForResource:@"button" ofType:@"png" inDirectory:[[buttons objectAtIndex:indexPath.row] objectForKey:@"name"]];
    UIImage * button=[UIImage imageWithContentsOfFile:buttonPath];
    UIImageView * buttonView=[[UIImageView alloc] initWithImage:button];
    [buttonView setContentMode:UIViewContentModeScaleAspectFit];
    [buttonView setFrame:contents.bounds];
    [contents addSubview:buttonView];

    //set tag to the indexPath.row so we can access it later
    [cell setTag:indexPath.row];

    //add interactivity
    UITapGestureRecognizer * tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onButtonTapped:)];
    [tap setNumberOfTapsRequired:1];
    [cell addGestureRecognizer:tap];

    //return the cell
    return cell;

}

Je peux fournir plus de code si nécessaire.

Comment puis-je empêcher les cellules de se corrompre?

  • Vous avez raison, c'est exactement la façon dont vous réutilisez les Cellules. Parce que vous venez d'ajouter une couche après l'autre sur votre cellulaire avec le addSubview: les appels.
InformationsquelleAutor Jimmery | 2013-10-09