我想在collectionView單元格內顯示一個進度指示器。爲此,有一個後臺線程向主線程發送通知以更新進度指示器。setNeedsDisplay()不更新collectionViewCell subView的drawRect
在主視圖控制器...
func updateProgressIndicator(notification:NSNotification){
let userInfo = notification.userInfo! as NSDictionary
let date = userInfo["date"] as! NSDate
let percentComplete = userInfo["percent"] as! Double
self.progressIndicator.text = "\(percentComplete)%" // this works
let dateIndex = self.calendarDates.indexOf(date)
let indexPath = NSIndexPath(forItem: dateIndex!, inSection: 0)
let cell = self.collectionView.dequeueReusableCellWithReuseIdentifier("DateCell", forIndexPath: indexPath) as! DateCell
cell.showProgress()
}
的函數定位indexPath針對小區進行更新。然後調用單元的showProgress方法。
class DateCell: UICollectionViewCell {
@IBOutlet weak var dotGraph: DotGraphView!
func showProgress(){
print(" DateCell showProgress") // this does get printed
self.setNeedsDisplay()
}
override func drawRect(rect: CGRect) {
print(" DateCell drawRect") // this never gets printed
//drawing functions go here
}
}
對正確的單元格調用showProgress()
方法,並顯示打印消息。然而,showProgress方法調用setNeedsDisplay()
時,drawRect函數從不執行。
我得到單元更新的唯一方法是使用reloadRowsAtIndexPaths
完全重新加載單元,但是這應該是不必要的。
關於如何獲得調用drawRect
函數的任何想法?
謝謝...這正是它。我創建了一個字典來保存這些單元格,以便每次在CollectionView中創建一個單元格時,該單元格將被存儲。然後,如所建議的那樣,只需調用所需單元格的'showProgress()'函數即可。 – Dustin
@Rob Napier,我面臨着同樣的問題,但即使是因爲我將它從可見單元格的列表中拉出並與唯一標識符(單元格類中的變量)匹配,我也有正確的單元格,並且也匹配地址,但仍然無法正常工作。 你可以看看這個:https://stackoverflow.com/questions/48201925/custom-uicollectionview-cells-not-updating-when-switched-between-tabs – Rana