2016-06-02 3 views
0

스토리 보드에 설정된 컬렉션보기의 사용자 지정 셀이 있고 해당 셀 클래스에 연결된 콘센트가 있습니다.셀을 업데이트하려고하면 사용자 지정 CollectionView 셀의 레이아웃 요소가 사라집니다.

class MyCustomCollectionViewCell: UICollectionViewCell { 

    // MARK: Outlets 

    @IBOutlet weak var customImage: UIImageView! 
    @IBOutlet weak var customProgress: UIProgressView! 
    @IBOutlet weak var customLabel: UILabel! 

} 

초기 설정은 내 데이터베이스에있는 항목의 특정 상태에 따라 사용자 정의 이미지, 이름과 진행 상황을 설정하고, 완벽하게 작동합니다.

특히 상태 표시 줄과 관련된 변경 사항을 반영하여 컬렉션보기를 업데이트하고 싶습니다. 또한 상태 표시 줄이 완료되면 이미지도 변경되어야합니다. 타이머를 사용

timer = NSTimer.scheduledTimerWithTimeInterval(3, target: self, selector: #selector(MyViewController.updateUI), userInfo: self, repeats: true) 

내가 초에 한 번씩 뷰 업데이트 할,보기가 나타날 때 시작 (I 효과적으로 테스트 3를 선택을뿐만 아니라만큼 어쩌면 20초 될 수있다). ,

  • reloadSections(mySection)reloadData() 모든 셀이 약간 깜박 원인 (확인 될 것이다)하지만 원인 :

    문제는 내가 모든 특정 단점을 가지고, 여기에 사용하는 어떤 방법을 모르는입니다 첫 번째 업데이트 후에 모든 진행 표시 줄이 완전히 사라집니다.

  • setNeedsLayout()setNeedsDisplay()은 전혀 영향을 미치지 않는 것으로 보입니다. 아무 것도 보이지 않습니다.

모든 방법과 같이 self.collectionView에있는 불렸다 :

@objc private func updateUI() { 
    // self.collectionView?.reloadSections(singleSection) 
    // self.collectionView?.reloadData() 
    // self.collectionView?.setNeedsLayout() 
    // self.collectionView?.setNeedsDisplay() 
} 

이 (내가 그들에게 한 모든 일을 시도) 내가 진행 바없이 (자동) 내보기를 업데이트 할 수있는 방법

사라지고 있니?

답변

0

별도의 대기열 (user2718075 제안)의 셀에 대한 자동 업데이트를 구현 한 후에도 여전히보기가 사라지는 문제가있었습니다. 이것은 진행 막대가있는보기 (들)가 화면에서 사라질 때마다 내가 스크롤했을 때 customProgress.hidden = true을 통해 진행 막대를 숨긴 다른 셀을 살펴볼 때마다 발생합니다.

이로 인해이 문제는 셀 재사용과 관련이 있다는 것을 알게되었습니다. 진행 막대가있는 셀은 진행 막대가없는 다른 셀에 사용되므로 숨겨졌습니다. 큐를 대기열에서 제거한 다음 다시 진행 막대를 필요로하는 셀을 다시 사용한 후 customProgress.hidden = false을 호출하지 않았습니다. 셀 구성에 해당 행을 추가 한 후에 문제가 사라졌습니다.

1

다른 스레드에서 실행되는 dispatch_async를 사용할 수 있다고 생각합니다.

collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath)에 플래그를 넣습니다. 참이면 이미지 만 변경하십시오.

셀에서, 이제 플래그가 true

dispatch_async(dispatch_get_main_queue(), { 
    //do staff to controle your progress state 
    // set your flag to true if progress is ok 
    // if ok then reload the collection 
    CollectionView.reloadData()} 

과 진행에 루프를 시작 이미지를 업데이트 할 수 있습니다. 시도하지 않았지만 가능한 방법 일 수 있다고 생각합니다.

+0

고마워, 이건 정말 나를 해결하는 데 도움이되었지만, 조금 다르게.기본적으로 진행 상황이 가득 찰 때까지 while 루프를 반복합니다. 그런 다음 이미지를 중지하고 변경할 수 있습니다. 다른 스레드에서이 작업을 수행하는 것이 좋습니다. – NerdyTherapist

관련 문제