在加载表视图中的所有单元格后,将在表视图单元格内重新加载集合视图

时间:2016-03-10 05:47:42

标签: swift uitableview uicollectionview

我正在尝试在表视图中的每个表视图单元格中实现集合视图,但是无法在正确的时间重新加载集合视图。看起来集合视图在加载了所有表视图单元格后重新加载,而不是每次新单元格出现在表格视图中时都会重新加载,因为我正在尝试这样做。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("LWTableViewCell") as! LWTableViewCell

    cell.collectionView.delegate = self
    cell.collectionView.dataSource = self

    if dataIsReady == 1 {
        setIndex = indexPath.row
        print("in table view cellForRowAtIndexPath, setting setIndex at \(setIndex)")
        cell.collectionView.reloadData()
    }
    return cell
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    if dataIsReady == 1 {
        print("In collection view numberOfItemsInSection setIndex is \(setIndex)")
        return self.model.sets[setIndex].subsets!.count
    }
    else { return 0 }   
}

在终端,我得到以下内容:

  

在表视图cellForRowAtIndexPath中,将setIndex设置为0

     

在表视图cellForRowAtIndexPath中,将setIndex设置为1

     

在表视图cellForRowAtIndexPath中,将setIndex设置为2

     

在集合视图中,numberOfItemsInSection setIndex为2

     

在集合视图中,numberOfItemsInSection setIndex为2

     

在集合视图中,numberOfItemsInSection setIndex为2

虽然我希望看到以下事件顺序(假设每次新的表视图单元格出列时都应该调用集合视图重载方法)。

  

在表视图cellForRowAtIndexPath中,将setIndex设置为0

     

在集合视图中numberOfItemsInSection setIndex为0

     

在表视图cellForRowAtIndexPath中,将setIndex设置为1

     

在集合视图中,numberOfItemsInSection setIndex为1

     

在表视图cellForRowAtIndexPath中,将setIndex设置为2

     

在集合视图中,numberOfItemsInSection setIndex为2

有关此行为发生原因以及如何对其进行修复的任何建议都将非常感谢!

我已经查看了关于该主题的其他一些问题,并且我知道有关于该主题的一些教程(例如,https://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell-in-swift/),但在开始用不同的方法做事之前,我想理解为什么以上似乎不起作用/可以做些什么才能使其发挥作用。

1 个答案:

答案 0 :(得分:0)

您无法依赖通话顺序。目前,您正尝试将setIndex从表格视图cellForRowAtIndexPath传递到集合视图的委托方法。解决此问题的一种简单方法是使用单个变量来传递行号,而不是将其传递到集合视图的标记属性中。然后每个集合视图将知道它的相关行号。即。

在表格视图中cellForRowAtIndexPath

cell.collectionView.tag = indexPath.row

然后在集合视图中numberOfItemsInSection

return self.model.sets[collectionView.tag].subsets!.count

另请注意,您不需要在这些方法中测试dataIsReady。只有在表格视图tableView:numberOfRowsInSection:中才需要此代码。当数据没有准备好时,它应该返回0(即没有要显示的行)。因此,永远不会调用表格视图cellForRowAtIndexPath,并且由于没有行,因此没有集合视图,因此永远不会调用它们numberOfItemsInSection