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 customUICollectionViewCell
退出队列时,它不会像第一次显示时那样被分配。相反,集合视图“重用”第一个单元格以显示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 customUICollectionViewCell
退出队列时,它不会像第一次显示时那样被分配。相反,集合视图“重用”第一个单元格以显示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
,使单元格进入“默认”状态。在特定情况下(比如你的情况),可能没有必要这样做。