2013-05-21 5 views
0

UICollectionViewCell 내부에있을 때 UIScrollView의 이상한 동작이 발생했습니다. 내 프로젝트에는 collectionView가 있고 각 셀에는 하나 이상의 이미지가 포함 된 UIScrollView가 있습니다. 물론UICollectionViewCell 및 UIScrollView

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

    CustomCollectionCell * cell = [cv dequeueReusableCellWithReuseIdentifier:@"CustomCell" forIndexPath:indexPath]; 
    UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 150, 150)]; 
    imageView.image = [UIImage imageNamed:@"someImage.png"];   
    [cell.scrollView addSubview:imageView]; 

    return cell; 
} 

내 프로젝트에서이 같은 이미지이지만 데이터베이스에서 공급되는 다른 사람이 아니에요 : 여기이 질문의 목적을 위해 일부 샘플 코드입니다.

첫 번째 수집 셀은 아무 문제없이 추가됩니다. 두 번째 셀을 추가 할 때 scrollView 자체를 복제하고 맨 위에 다른 인스턴스를 배치 할 것 같습니다. 나는 이상한 소리로 들리 겠지만 당신은 아래 이미지에서 모양을 볼 수 있습니다 왼쪽에있는 ScrollView에 이미지가 어두워 얼마나

enter image description here

공지 사항, 나는있는 ScrollView 중복 얻을 그것 때문에 가정합니다.

그래서 셀이 잘못된 방법으로 재사용되고 있다고 생각합니다.

도움 주셔서 감사합니다.

답변

0

collectionView: cellForItemAtIndexPath:이 호출 될 때마다 새 UIImageView이 재사용 된 셀에 추가됩니다. 이를 해결하려면 사용자 정의 UICollectionViewCell에서 prepareForReuse 메소드를 구현하십시오. 이 방법으로 이미지보기를 제거하십시오.

이렇게하려면 이미지보기에 태그를 설정할 수 있습니다. 예, :

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

    CustomCollectionCell * cell = [cv dequeueReusableCellWithReuseIdentifier:@"CustomCell" forIndexPath:indexPath]; 
    UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 150, 150)]; 
    imageView.image = [UIImage imageNamed:@"someImage.png"];   
    [cell.scrollView addSubview:imageView]; 

    // The following line of code is new 
    cell.contentView.tag = 100; 

    return cell; 
} 

그리고 사용자 정의 셀의 prepareForReuse 방법 갱신/추가, 셀에서 이미지보기를 제거하려면 다음

-(void)prepareForReuse{ 
    UIView *myImageView = [self.contentView viewWithTag:100]; 
    [myImageView removeFromSuperview]; 
} 
+0

좋아, 문제의 고정 부분을, 그렇지 않습니다 중복,하지만 지금은 또 다른 이상한 문제를 발견. 하나의 셀 'scrollViews'에서 스 와이프하여 콘텐츠 오프셋을 변경하면 콘텐츠 오프셋이 다음 셀로 전달되고 이전 셀은 새로운 콘텐츠 오프셋 (예 : x = 0, y = 0)을 가져올 수 있습니다. –

+0

정말이 동작에 대한 이유를 이해하지 못하기 때문에 설명하기가 약간 어렵습니다. 미안합니다 :) –

+0

제가 알고있는 것처럼, 전체 collectionView는 새로운 셀이 추가 될 때마다 업데이트됩니다. 셀에 scrollView가 추가되었을 때 매우 이상한 결과가 발생합니다. 나는 새 셀만 수정되었다고 생각했지만 모든 셀이 재사용되는 것을 볼 수있다. –