在集合视图单元格 Swift 中管理多个进度视图
Posted
技术标签:
【中文标题】在集合视图单元格 Swift 中管理多个进度视图【英文标题】:Manage multiple progress view in collection view cells Swift 【发布时间】:2015-08-05 14:13:46 【问题描述】:在我的应用程序中,我有一个集合视图,单元格有一个图像和按钮。 UIImage 代表用户想要下载的一本书。当用户单击单元格中的 按钮 时,我应该显示一个进度视图,代表下载进度。 我的细胞是笔尖。 我的问题在于管理所有此单元格中的进度视图。 当我单击一个单元格时,进度条显示在另一个单元格中! 以前有人尝试过这样做吗? 已编辑1: 我的 cellForItemAtIndexPath 是:
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("guides-cell", forIndexPath: indexPath) as! GuidesViewCell
cell.guidesTypeLabel.text = guidesArray[indexPath.item].Title
cell.downloadLink = guidesArray[indexPath.item].Download1
cell.downloadButtonOutlet.addTarget(self, action: "downlaodAction:", forControlEvents: UIControlEvents.TouchUpInside)
cell.downloadButtonOutlet.tag = indexPath.row
已编辑2:
我尝试从 cell 类 调用下载函数,我采用按钮的动作插座,并从中调用下载函数。 像这样:
@IBAction func downloadButtonAction(sender: AnyObject)
FileIsdownloding = true
downloadActivityIndicator.alpha = 1
downloadActivityIndicator.startAnimating()
downloadProgressBar.alpha = 1
DownloadpdfsFilesControllerVar.downloadPDFFile(downloadLink, view:self, progressBarVar: downloadProgressBar, senderButton: sender as! UIButton)
我仍然有同样的问题。进度条显示在随机单元格中!!!! 那是糟糕的!
如果有任何帮助,我将不胜感激。
【问题讨论】:
似乎您没有以正确的方式重用集合视图单元格。你能显示cellForIndexPath的代码吗? 参见 WWDC 2015 的“Best Practices in Progress Reporting”。他们演示了这个确切的问题,以及一个完整的示例项目。 developer.apple.com/videos/wwdc/2015/?id=232(您使用错误单元格的具体问题可能意味着您错误地出售和配置单元格,并且与进度报告无关,但示例项目也将展示如何正确执行此操作。) @Kevin 我编辑我的问题 @RobNapier 谢谢 :) 我一定会检查你的链接 @RobNapier 我编辑了我的问题,你能检查一下吗?我会非常感谢任何帮助。 【参考方案1】:cell.downloadButtonOutlet.addTarget(self, action: "downlaodAction:", forControlEvents: UIControlEvents.TouchUpInside)
从dequeueReusableCellWithReuseIdentifier
提取的单元格之前可能已经被使用过。
addTarget(action:forControlEvents:)
添加一个目标。它不会删除旧的。您需要包括:
cell.downloadButtonOutlet.removeTarget(nil)
清除旧目标。您当前的代码可能正在为该单元格曾经使用过的每个目标调用该操作。
【讨论】:
感谢您的回答,但我应该在哪里添加呢?在 cellForItems 中? 是的,在配置单元的块中。阅读 Table View Programming Guide 以获取有关如何出售和配置单元的指导。 (集合视图遵循与表视图几乎相同的架构。)developer.apple.com/library/prerelease/ios/documentation/… 非常感谢。但我有 2 个问题:1-我如何在 cellForItems 中添加目标并同时删除它! 2-如果我从单元类中调用“downlaodAction”,为什么我仍然有问题? 您正在使用的单元格已经配置好了。这是一个可重复使用的单元。以前用过。您必须首先删除旧的配置设置(如旧目标),然后设置一个新的。同样,您必须确保每个单元格都正确配置为指向正确的进度指示器等。您可能在其他地方设置了其他单元格属性,并且在重复使用单元格时没有正确替换。以上是关于在集合视图单元格 Swift 中管理多个进度视图的主要内容,如果未能解决你的问题,请参考以下文章