Swift 中组合的 TableViews 和 CollectionViews

Posted

技术标签:

【中文标题】Swift 中组合的 TableViews 和 CollectionViews【英文标题】:Combined TableViews & CollectionViews in Swift 【发布时间】:2015-08-05 22:55:32 【问题描述】:

我被困住了... 我有一个collectionView(我们称之为masterCollectionView)。 collectionView 的每个单元格都包含一个数据列表。

masterCollectionView 中的每个 collectionView 单元格中,我都有一个 tableView,它在每一行中保存所有记录本身,并根据数据集中的某些条件分组到 tableView 部分。

数据存储在我从云端下载的多维数组中,这为masterCollectionView 单元格提供了列表标题,以及每个部分的# of section、# of records (i.e. rows)相应 tableView 的列表。

我的问题是,当我填充 tableView 时,我无法分辨我在哪个 masterCollectionView 单元格中。例如:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

上述函数不允许我识别我当前正在构建 tableView 的masterCollectionView 单元格,因此我不知道要加载数据数组中的哪些记录。

目前,我已将以上所有内容构建为界面构建器中的一个故事板以及一个相应的视图控制器,但可以根据建议轻松更改。

请帮忙。我正在拔头发。

【问题讨论】:

你能澄清一下这个问题吗?为什么不创建一个通用的 tableView 类,然后在每个 collectionViewCell 中初始化 tableView 并传递必要的数据? 目前,我在一个视图控制器中拥有一切。每个 tableView 都在每个 collectionView 单元格中填充相同的数据,因为它不知道数据数组的哪个部分来获取该特定 tableview 的数据。我将如何去做你建议的事情?我认为您所说的可能是我需要做的,只是不确定我知道该怎么做。感谢您的帮助。 但是如果你想让每个 tableView 知道它在里面是什么 collectionViewCell,你会跪下来把它分成两个类。对于 tableViews,创建一个 UITableView 的抽象子类 谢谢。我是 swift 和 ios 开发的新手。我该怎么做? 【参考方案1】:

您可能希望为每个集合视图单元格创建一个单独的表视图数据源实例。

您可以创建一个新的 NSObject 子类来实现 UITableViewDataSource,其目的只是充当一个单元格的数据源。该对象只能使用该单元格的数据进行配置。

然后,您将拥有这些实例的数组,每个集合视图单元格一个。当单元格在 cellForItemAtIndexPath 中加载时,将该单元格的表视图委托设置为数组中的正确数据源。

【讨论】:

谢谢安吉拉。我该怎么做呢?【参考方案2】:

好的,我将首先为您提供解决问题的最快方法,尽管它易于实施,但不是“正确”的方法,我稍后会解释。

所以最快的方法是使用视图标签。每个UIView 都有一个标记成员,它是一个整数。因此,无论您在哪里摆桌,都可以这样做

我没有你的代码,所以我假设你在

中设置你的表

func collectionView(_ collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell

UICollectionView 的功能,所以你可以在里面做这样的事情

myTableView.tag = indexPath.row

这应该为 TableView 设置标签,当您创建它们时,它们将成为数组中的索引。在你的UITableView 数据源中你可以这样做

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return yourDataArray[tableView.tag].count;

这是正确分解数据的快捷方式,可以将您的UICollectionView 单元格作为包含的UITableView 的数据源,然后在需要时加载数据。

【讨论】:

正确的解决方案正是上面@Angela 告诉你的内容

以上是关于Swift 中组合的 TableViews 和 CollectionViews的主要内容,如果未能解决你的问题,请参考以下文章

同一 ViewController 中的两个 tableViews 不会在 swift 3 中显示

Swift 3 TableView Segue 到多个其他 TableViews

TableViews 不能与 TabBarController Swift 一起使用

一个 UIView Swift 中的多个 TableViews - 如何同时显示

关于 TableViews:如何通过类管理节标题和行?

使用 Swift 在 MainStoryboard 表视图中显示数组?