我有一个集合视图的自定义单元格,该单元格设置在情节提要中,并将插座连接到相应的单元格类。
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)使用在视图出现时启动的计时器,我希望每隔几秒钟更新一次视图(我选择了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()
}(我一个接一个地试了一遍)
如何在进度栏消失的情况下更新视图(自动)?
发布于 2016-06-03 11:16:54
在实现了单独队列中单元格的自动更新之后(正如user2718075所建议的),我仍然存在视图消失的问题。每当我滚动并查看其他通过customProgress.hidden = true隐藏进度条的单元格时,带有进度条的视图就会从视线中消失,因为它们已经完成。
这让我意识到,这个问题与单元重用有关。带有进度条的单元将用于另一个没有进度条的单元格,因此它是隐藏的。在对需要进度条的单元格重新排队并重用它之后,我没有调用customProgress.hidden = false。将该行添加到单元格配置后,问题就消失了。
发布于 2016-06-02 20:32:30
我认为您可以使用dispatch_async,它运行在另一个线程中。
在collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath)中放置一个标志,如果真只更改图像。
在单元格中,启动一个进度循环。
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()}现在标志为真,更新您的形象。还没试过,但我认为这可能是一种可能的方法。
https://stackoverflow.com/questions/37601356
复制相似问题