首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自定义CollectionView单元格的布局元素在试图更新单元格时消失

自定义CollectionView单元格的布局元素在试图更新单元格时消失
EN

Stack Overflow用户
提问于 2016-06-02 20:18:24
回答 2查看 362关注 0票数 0

我有一个集合视图的自定义单元格,该单元格设置在情节提要中,并将插座连接到相应的单元格类。

代码语言:javascript
运行
复制
class MyCustomCollectionViewCell: UICollectionViewCell {

    // MARK: Outlets

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

}

初始设置工作完美,我正在根据数据库中某一项的特定状态设置自定义图像、名称和进度。

我希望更新集合视图以反映更改,特别是有关状态栏的更改。此外,一旦状态栏完成,图像也应该改变。

代码语言:javascript
运行
复制
timer = NSTimer.scheduledTimerWithTimeInterval(3, target: self, selector: #selector(MyViewController.updateUI), userInfo: self, repeats: true)

使用在视图出现时启动的计时器,我希望每隔几秒钟更新一次视图(我选择了3来有效地测试它,但它也可能长达20秒)。

问题是,我不知道在这里使用什么方法,因为所有这些方法都有特定的缺点:

  • reloadSections(mySection)reloadData()会使所有的单元格稍微闪烁(这是可以的),但是在第一次更新之后,所有的进度条都会完全消失。
  • setNeedsLayout()setNeedsDisplay()似乎毫无作用。什么都没有发生。

所有方法都在self.collectionView上调用,如下所示:

代码语言:javascript
运行
复制
@objc private func updateUI() {
    // self.collectionView?.reloadSections(singleSection) 
    // self.collectionView?.reloadData() 
    // self.collectionView?.setNeedsLayout() 
    // self.collectionView?.setNeedsDisplay() 
}

(我一个接一个地试了一遍)

如何在进度栏消失的情况下更新视图(自动)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-03 11:16:54

在实现了单独队列中单元格的自动更新之后(正如user2718075所建议的),我仍然存在视图消失的问题。每当我滚动并查看其他通过customProgress.hidden = true隐藏进度条的单元格时,带有进度条的视图就会从视线中消失,因为它们已经完成。

这让我意识到,这个问题与单元重用有关。带有进度条的单元将用于另一个没有进度条的单元格,因此它是隐藏的。在对需要进度条的单元格重新排队并重用它之后,我没有调用customProgress.hidden = false。将该行添加到单元格配置后,问题就消失了。

票数 0
EN

Stack Overflow用户

发布于 2016-06-02 20:32:30

我认为您可以使用dispatch_async,它运行在另一个线程中。

collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath)中放置一个标志,如果真只更改图像。

在单元格中,启动一个进度循环。

代码语言:javascript
运行
复制
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()}

现在标志为真,更新您的形象。还没试过,但我认为这可能是一种可能的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37601356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档