

collectionViewをスクロールするとcellのsubviewが別のcellに移動して困っております。

カメラロールの写真を取得し、collectionviewへ順に配置。  
配置されたcellをタップするとtwitterのようにsubviewをcellへ追加するという処理を書いています。

[code]

    #pragma mark - UICollectionViewDataSource
    
    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    
        PHAsset *asset = self.assets[indexPath.item];
    
        CameraRollCell *cell = (CameraRollCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cameraRollCellID forIndexPath:indexPath];
    
        [self.imageManager requestImageForAsset:asset
                                     targetSize:self.cellSize
                                    contentMode:PHImageContentModeDefault
                                        options:nil
                                  resultHandler:^(UIImage *result, NSDictionary *info) {
                                      if (result) {
                                          cell.backgroundView = [[UIImageView alloc] initWithImage:result];
                                      }
                                  }];
    
        return cell;
    }
    
    - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
        PHAsset *asset = self.assets[indexPath.item];
    
        CameraRollCell *cell = (CameraRollCell *)[collectionView cellForItemAtIndexPath:indexPath];
        [cell selectPhoto];
    }
    
[/code]

そう思い、このような処理を書きました。`selectPhoto`を呼ぶことで、カスタムセル内にある、自らにsubviewを追加するという処理が走ります。

追加するとこのようになります。  
[![正常時](https://i.stack.imgur.com/eQG2L.jpg)](https://i.stack.imgur.com/eQG2L.jpg)

追加までは無事完了するのですが、collectionviewをスクロールすると、imageViewはそのままに、その追加されたsubViewが別のcellに移動してしまいます。  
[![異常時](https://i.stack.imgur.com/T63HP.jpg)](https://i.stack.imgur.com/T63HP.jpg)

どのようにすればこの不具合は起こらなくなるでしょうか？  
ご回答、よろしくお願い致します。


CC BY-SA 3.0
2016-03-18T06:48:36.360
23245
2016-10-08T00:54:25.297
2016-03-18T13:36:24.520
8218
8218
question
ios objective-c uicollectionview uicollectionviewcell
collectionViewをスクロールするとcellのsubviewが別のcellに移動する


画像が取得された時にセルが別のセルになったり、再利用されたセルに以前のUIImageViewが乗ったままになっているのではないでしょうか。

UIImageViewは初めからセルにのせておいて、画像をセットする時にテーブルからセルをindexPathで取得して所定の行のセルに画像をセットすると良いのではないでしょうか。以下のリンク先はUITableViewの例ですが参考になると思います。  
[ios - Async image loading from url inside a UITableView cell - image changes
to wrong image while scrolling - Stack
Overflow](https://stackoverflow.com/questions/16663618/async-image-loading-
from-url-inside-a-uitableview-cell-image-changes-to-wrong)


CC BY-SA 3.0
2016-03-18T12:28:26.870
23258
2016-03-18T12:28:26.870
2017-05-23T12:38:55.307
-1
238
23245
answer