Ios 未刷新排队的UICollectionViewCell

Ios 未刷新排队的UICollectionViewCell,ios,objective-c,refresh,uicollectionview,Ios,Objective C,Refresh,Uicollectionview,我有一个带有UICollectionView的应用程序,其中单元格水平滚动(一次只显示一个单元格)。每个单元格都有一个UITableView,它在每个UITableView单元格中显示内容(URL链接) 问题在于,UICollectionView的前两个单元格显示正确的内容,但从第三个单元格开始,内容从排队的单元格显示。只有当用户向下滚动然后向上滚动到顶部时,才会显示出队列单元格的UITableView上的正确内容。 例如,第三个单元格的内容是第一个单元格的内容。 该单元格是一个自定义的UICo

我有一个带有
UICollectionView
的应用程序,其中单元格水平滚动(一次只显示一个单元格)。每个单元格都有一个
UITableView
,它在每个
UITableView单元格中显示内容(URL链接)
问题在于,
UICollectionView
的前两个单元格显示正确的内容,但从第三个单元格开始,内容从排队的单元格显示。只有当用户向下滚动然后向上滚动到顶部时,才会显示出队列单元格的
UITableView
上的正确内容。
例如,第三个单元格的内容是第一个单元格的内容。 该单元格是一个自定义的
UICollectionViewCell
,承载
UITableView
。自定义单元格实现了
UITableViewDataSource
UITableViewDelegate

我搜索了不同的论坛和网站,找到了刷新的解决方案。 我尝试将
[collectionView reload]
添加到
-cellForItemAtIndexPath:
方法中,但它进入了常量循环。我知道这不是正确的位置,但我没有任何其他方法导致刷新(仅滚动单元格加载下一个单元格的内容)。

有人能帮我解决这个问题吗?

您缺少一些关于排队的事实。
当3d custom
UICollectionViewCell
退出队列时,它不会像第一次显示时那样被分配。相反,集合视图“重用”第一个单元格以显示3d。清除自定义单元格类中内容的最佳时机是
-(void)prepareforeuse
。如果覆盖它并清除其内容,则
-cellForItemAtIndexPath:
将使“clear”单元格出列,您可以进一步自定义该单元格。
但是,我不知道如何“清除”tableView,不确定是否可能。您必须在
-cellForItemAtIndexPath:
中的tableView上重新加载数据。例如:

- (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath
{
    MyCVCell *cell = [collectionView dequeueReusableCellWithIdentifier:@"MyCVCell" forIndexPath:indexPath];
    cell.arrayOfURLsForDisplay = self.arrayOfArraysOfURLs[indexPath.row];
    [cell.tableView reloadData];
    return cell;
}

这里我的意思是,您在viewController中有一些
ArrayOfarRaySofURL
,您在自定义单元格中从一些
ArrayOfurSforDisplay
中显示URL,您缺少一些关于出列的事实。
当3d custom
UICollectionViewCell
退出队列时,它不会像第一次显示时那样被分配。相反,集合视图“重用”第一个单元格以显示3d。清除自定义单元格类中内容的最佳时机是
-(void)prepareforeuse
。如果覆盖它并清除其内容,则
-cellForItemAtIndexPath:
将使“clear”单元格出列,您可以进一步自定义该单元格。
但是,我不知道如何“清除”tableView,不确定是否可能。您必须在
-cellForItemAtIndexPath:
中的tableView上重新加载数据。例如:

- (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath
{
    MyCVCell *cell = [collectionView dequeueReusableCellWithIdentifier:@"MyCVCell" forIndexPath:indexPath];
    cell.arrayOfURLsForDisplay = self.arrayOfArraysOfURLs[indexPath.row];
    [cell.tableView reloadData];
    return cell;
}

这里我的意思是,您在viewController中有一些
ArrayOfarRaySofURL
,您在自定义单元格中从一些
ArrayOfurSforDisplay
中显示URL,我遇到了类似的问题,而不是在
cellForItemAtIndexPath
中使用
[cell.tableView重载数据]
,我在自定义
UITableviewCell
中覆盖的
preparefourse
方法中调用了
collectionView.reloadData
,而不是在
cellForItemAtIndexPath
中使用
[cell.tableView reloadData]
,遇到了类似的问题,我调用了
collectionView.reloadData
中的
preparefourse
方法,该方法在自定义
UITableviewCell

中被覆盖。非常感谢您的帮助。我不得不调用-(void)中的方法ClearContextBeforeDrawing([cell.tableView ClearContextBeforeDrawing];)在UITableView上准备reload方法,然后在cellForItemAtIndexPath中调用方法reload([cell.tableView reloadData])。在如上更改代码后,该方法工作正常。你的答案帮了大忙(在我浪费大量时间尝试自己之前,我应该把它贴出来)。另外,我调用[cell.tableView ClearContextBeforeDrawing]并在cellForItemAtIndexPath中重新加载它的工作方式相同,无需预先准备,仅供参考。没问题。但是,使用此类控件(
UICollectionView
UITableView
)的一般做法要求您覆盖
-prepareforeuse
,使单元格进入“默认”状态。在特定情况下(如您的情况),可能不需要这样做。非常感谢您的帮助。我必须在UITableView上的-(void)prepareForReuse方法中调用ClearContextBeforeDrawing([cell.tableView ClearContextBeforeDrawing];)方法,然后调用重载方法([cell.tableView reloadData])在cellForItemAtIndexPath中。在如上更改代码后,它工作正常。你的答案帮了大忙(在我浪费大量时间尝试自己之前,我应该把它贴出来)。另外,我调用[cell.tableView ClearContextBeforeDrawing]并在cellForItemAtIndexPath中重新加载它的工作方式相同,无需预先准备,仅供参考。没问题。但是,使用此类控件(
UICollectionView
UITableView
)的一般做法要求您覆盖
-prepareforeuse
,使单元格进入“默认”状态。在特定情况下(比如你的情况),可能没有必要这样做。