一个一个输出 UICollectionView 单元格的 Swift 按钮?

Posted

技术标签:

【中文标题】一个一个输出 UICollectionView 单元格的 Swift 按钮?【英文标题】:Swift Button That Outputs UICollectionView Cells One by One? 【发布时间】:2018-03-27 21:38:20 【问题描述】:

我制作了一个 UICollectionView,一切正常。它生成了 100 个单元格,我可以在模拟器中毫无问题地滚动。

但是,我不想一次看到所有单元格,而是希望在按下红色按钮时一个一个地释放单元格。

我很困惑,因为我在情节提要中注意到,它一次硬编码了屏幕上的单元格数量。有没有办法解决这个问题?

谢谢!

This is what the UI looks like in storyboard.

This is the code I used to make it. It's basic, and just says to fill the text box of the cell with a string from the array.

【问题讨论】:

每个人都提供了大量有用的信息,我确实学到了很多!谢谢! 你是什么意思“我希望每当按下那个红色按钮时,单元格就会被一个一个释放”?您是说您希望集合视图一开始是空的,并且每次单击“+”按钮时,都会添加一个单元格?你想让它在某个最大数量的单元格处停止吗? 100个细胞?如果您想要第 100 个单元格,则必须点击按钮 100 次可能会很痛苦。 是的,这正是我的意思。这是一款桌面纸牌游戏——你不应该一次看到所有的单元格。现在,每张牌都有一个任务要轮到你做。如果你不能这样做,你向左滑动删除它,它会弹出一个新的。这是我到目前为止的代码,但我需要再次改进它,以便在按下按钮之前隐藏卡片。 【参考方案1】:

你的问题是乱码。

集合视图有一个委托和一个数据源。数据源响应UICollectionViewDataSource 协议中的消息。该协议允许集合视图询问它有多少个部分,每个部分有多少行,以及从这些部分和行中询问单元格。

还有一些方法可以让您告诉表格视图您要添加更多单元格。看看方法insertItems(at:)。这使您可以提供一个 indexPaths 数组,它告诉表视图您已经添加了新条目。

您当然可以编写一个按钮操作方法,将一个或多个条目添加到您的数据模型,然后使用insertItems(at:) 方法通知集合视图它有新条目。如果集合视图的内容视图中有空间显示其他单元格,它将调用数据源并在这些索引路径处请求新的单元格。

【讨论】:

【参考方案2】:

听起来您只需要跟踪要显示的项目数量(这将增加按下按钮的次数)并在 UICollectionViewDataSource 方法中使用它。比如:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return min(myRunningItemCount, maximumNumberOfItems) //assuming there's a maximum

然后,只要该数字发生变化,您只需在集合视图上调用 reloadData。

【讨论】:

您没有告诉 OP 如何通知集合视图您添加了更多单元格。 “蛮力”方法是简单地调用 reloadData,但使用其中一种方法可以更好、更有效地添加/修改您正在更改的 indexPaths。 (见我的回答。)

以上是关于一个一个输出 UICollectionView 单元格的 Swift 按钮?的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView / FlowLayout

UICollectionView 中的分页与下一个和上一个单元格的预览

UICollectionView 在 UICollectionViewCells 上调用 setNeedsDisplay

同时在多个 UICollectionView 上调用 reloadData

如何将 Plist 文件与 UITableView / UICollectionView 一起使用?

UICollectionView的使用