滚动 UICollectionView 不断更新值
Posted
技术标签:
【中文标题】滚动 UICollectionView 不断更新值【英文标题】:Scrolling through UICollectionView keeps on updating values 【发布时间】:2017-08-09 11:39:08 【问题描述】:我的项目中有一个 UICollectionView,我在其中添加每个单元格中添加的项目数量,并在 UIBarButtonItem 中显示总数。但是,当我滚动浏览视图时,数字会不断变化。我知道这个问题与集合和表视图重用单元格的事实有关,我对此做了很多研究,但我无法解决这个问题。覆盖“prepareForUse()”也无济于事。我仍然是初学者,如果我天真,请原谅。提前致谢。
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = trayCell.dequeueReusableCell(withReuseIdentifier: "trayCell", for: indexPath) as! TrayItemCollectionViewCell
//initializing labels
if let quantity = arrayOfOrders[indexPath.row]["quantity"] as? Int
totalQuantity += quantity
trayButton.title = "\(totalQuantity)"
return cell
【问题讨论】:
您试图在条形按钮标题中显示整个集合视图中的项目总数? @Bader Yusuf Serhan 有区别不断变化还是重复? 请显示更多集合视图的代码 @jegadeesh 我的应用程序是餐厅菜单,您选择一组项目以及每个项目的数量,所以我试图显示总数量。它工作正常,但是当我向下或向上滚动时,值会随着单元格重新加载而不断变化 @TusharSharma 这个数字一直在增加,因为它每次都在增加 【参考方案1】:您需要在collectionView(_:cellForItemAt:)
方法之外调用trayButton
标题更新代码。
collectionView(_:cellForItemAt:)
将在每次出现单元格时被调用。理想的流程是在您获得 arrayOfOrders
(可能在 viewDidLoad:
)后立即使用以下代码更新该标题:
/// Get array of quantities
let quantityArray = arrayOfOrders.flatMap $0["quantity"] as? Int
/// Get sum
let totalQuantity = quantityArray.reduce(0, +)
/// Update button title
trayButton.title = "\(totalQuantity)"
【讨论】:
【参考方案2】:for (index, element) in arrayOfOrders.enumerate()
if let quantity = element["quantity"] as? Int
totalQuantity += quantity
trayButton.title = "\(totalQuantity)"
这样做。 (我没有检查这个,所以如果需要的话做一些调整。)
【讨论】:
我的问题实际上是与集合视图的滚动:(【参考方案3】:每次重新加载 tableView 时,使用 for 循环从 arrayOfOrders 添加所有数量的值。这是唯一的办法。
【讨论】:
以上是关于滚动 UICollectionView 不断更新值的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionView 的标题视图在滚动时不断重复 - 如何创建固定(非粘性)的单个集合视图标题?
UICollectionView 单元格在可见时不断重新加载
在 UICollectionView 滚动后获取可见项目的更新 IndexPath