结合TableViews& Swift中的CollectionViews

时间:2015-08-05 22:55:32

标签: ios swift uitableview uicollectionview

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

masterCollectionView中的每个collectionView单元格中,我有一个tableView,它包含每行中的所有记录,根据数据集中的某些条件分组到tableView部分。

数据存储在我从云端下载的多维数组中,这为masterCollectionView单元格提供了列表标题,并提供了#个部分,记录数(即行数)在各个tableView的每个列表中。

我的问题是,当我填充tableView时,我无法判断我所在的masterCollectionView个单元格。例如:

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

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

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

请帮忙。我把头发拉了出来。

2 个答案:

答案 0 :(得分:1)

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

您可以创建一个新的NSObject子类,实现UITableViewDataSource,其目的只是作为一个单元格的数据源。此对象只能配置该单元格的数据。

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

答案 1 :(得分:1)

好的,我会首先为您提供最快速的解决方案,虽然它很容易实现但不是“正确”的方法,我稍后会解释。

所以最快的方法是使用视图标签。每个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的数据源,然后在需要时加载数据。