2016-06-26 2 views
0

단일 UITableViewCell에 UIImageView를 추가 할 때 문제가 있습니다. , indexPath.row하나의 UITableViewcell에 서브 뷰 추가하기

let cell = self.timelineTableView.dequeueReusableCellWithIdentifier(NSStringFromClass(ClassicCaseCell), forIndexPath: indexPath) as? ClassicCaseCell 

if self.mediaTypeArray[indexPath.row] == "Image" { 

    let imageView = UIImageView() 
    imageView.frame.size = (cell?.evidenceView.frame.size)! 
    imageView.frame.origin = CGPointZero 
    imageView.image = img 

    cell?.evidenceView.addSubview(imageView) 
} 

은 그러나 좋은 작품 : 인덱스에서 "이미지"난 단지 self.mediaTypeArray 문자열을 포함하는 경우 셀에 추가됩니다 cellForIndexPath 위임 방법과 같이 하위 뷰를 추가 다른 두 개의 셀에는 self.mediaTypeArray [indexPath.row]가 "Image"와 같지 않아도 동일한 이미지 뷰가 포함되어 있고 그 이유는 알 수 없습니다. 재사용이 가능한 tableviewcells와 관련이 있을지 모르지만 나는 왜 이것이 그렇게 할 것인지 모르겠습니다. 도와주세요!

답변

2

나는 세포가 재사용되기 때문에 이것이다는 것을 느끼고있다.

이 문제를 해결할 수있는 방법은 ClassicCaseCellprepareForReuse 방법을 재정의하여 evidenceView에서 이미지보기를 제거하는 것입니다.

그러나이 방법으로 위임자의 cellForIndexPath 메서드를 통해 이미지보기를 추가하지 않는 것이 좋습니다. 대신 ClassicCaseCellcellForIndexPath에서 설정할 수있는 인스턴스 변수로 이미지보기를 유지해야합니다. 이 방법은 많아야 하나뿐입니다. prepareForReuse에 이미지 뷰를 설정하지 않고 셀에 설정되지 않았는지 확인하십시오.

+0

감사합니다! 내가 아픈 두 번째 옵션으로 가서 그냥 초기화 할 때 이미지를 할당합니다 –

0

UIImageView를 한 번만 추가하면됩니다. 다시 셀을 다시 사용하면 이미 존재할 수도 있습니다. 문제는 이미 추가했는지 여부를 감지하는 것입니다. 여기에 몇 가지 제안은 다음과 같습니다

1) 항상을 (만들어 단지 이미지를 설정하거나)

2를 숨길)이 고유 한 태그를 지정하고 설정해야 할 때 태그에 보이지 않는 그것 ... 아무 꼬리표도, 그 후에 그것을 창조하십시오

1

먼저 다른 곳에서 추천 된대로 tag 속성을 사용하지 마십시오. 그건 오래전에 사용 된 기술 이었지만, 애플은 지금 그 실천을 낙담시키고 있습니다. 둘째로, 나는 당신의 삶을 단순화하고 간단히 프로그래밍 방식으로 이미지 뷰를 cellForRowAtIndexPath에 추가하지 말 것을 제안합니다. 프로그래밍 방식으로 이미지 뷰를 추가하면 셀 재사용은 (a) 이미지 뷰가 필요한지 여부를 결정하는 어색한 프로세스를 도입합니다. (b) 존재하는 이미지 뷰가 존재하는지 여부; (c) 이미지보기 추가/제거 및/또는 기존보기 참조 가져 오기.

매우 간단한 해결책 중 하나는 이미지보기가있는 셀 프로토 타입과없는 셀 프로토 타입이있는 것입니다. 그런 다음 미디어 유형에 따라 셀을 적절한 스토리 보드 식별자로 축출하고 사용하십시오.

다른 방법으로는 셀에 이미지보기를 표시하고 적절하게 숨기거나 표시하는 것입니다. 그런 다음 문제는 이미지 뷰를 볼 수있는 시점과 그렇지 않은 시점에 대해 두 가지 제약 조건 세트를 가장 효과적으로 관리하는 방법이됩니다. 당신은 제약 조건 우선 순위를 현명하게 선택하고, cellForRowAtIndexPath에서 적절한 제약 조건을 활성화/비활성화하는 등의 작업을 통해이를 수행 할 수 있습니다.하지만 위의 방법보다 훨씬 성가 시므로 두 개의 셀 프로토 타입 만 사용하면됩니다.

+0

하지만 내가 얼마나 많은 UIImageViews, 상황을 고려해야하는지, 동적 추가됩니다 및 배열 항목에 따라 달라집니다.내가 배열 항목을 기반으로 셀에 UILabel을 추가해야한다고 가정하면 첫 번째 셀에는 1 개의 항목이 포함될 수 있고 두 번째 레이블에는 2 개의 레이블이 포함될 수 있습니다. – Ranjit

+0

여기에서 내이 질문을 볼 수 있습니다. 여기에서이 문제에 직면합니다 http : // stackoverflow .com/questions/39683959/dynamic-add-subviews-touitableviewcell – Ranjit

0

tableview 셀에서 prepareForReuse 위임을 덮어 쓰고 거기에서 이미지 뷰를 제거하십시오.

관련 문제