出列的UICollectionViewCell未刷新

时间:2014-01-04 23:54:12

标签: ios objective-c refresh uicollectionview

我有一个带UICollectionView的应用程序,其中包含水平滚动单元格(一次只显示一个单元格)。每个单元格都托管UITableView,其中显示每个UITableViewCell中的内容(网址链接)。
问题是UICollectionView的前两个单元格显示正确的内容,但是从第三个单元格开始,内容从出列的单元格中显示。只有当用户向下滚动然后向上滚动到顶部时,才会显示出列单元格UITableView上的正确内容。
例如,第三单元的内容是来自第一单元的内容。 该单元格是托管UICollectionViewCell的自定义UITableView。自定义单元格实现UITableViewDataSourceUITableViewDelegate 我搜索了不同的论坛和网站,找到了刷新的解决方案。 我尝试将[collectionView reload]添加到-cellForItemAtIndexPath:方法,但它会进入常量循环。我知道这不是正确的地方,但我没有任何其他导致刷新的方法(只滚动单元格加载下一个单元格的内容)。
有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

你遗漏了一些关于出队的事实 当3d自定义UICollectionViewCell出列时,它不会像第一次显示时那样分配。相反,您的集合视图“重用”第一个单元格来显示3d。清除自定义单元格类中内容的最佳时机是-(void)prepareForReuse。如果您覆盖它并清除其内容,-cellForItemAtIndexPath:将出列“清除”单元格,您可以进一步自定义。
但是,我并不完全知道如何“清除”tableView,不确定它是否可行。您必须在reloadData的tableView上-cellForItemAtIndexPath:。例如:

- (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中有一些arrayOfArraysOfURLs,您可以从某些arrayOfURLsForDisplay

中显示自定义单元格中的网址

答案 1 :(得分:0)

我遇到了类似问题,而不是在[cell.tableView reloadData]中使用cellForItemAtIndexPath,而是在collectionView.reloadData方法中调用了prepareForUse,并在您的自定义UITableviewCell中覆盖了 private void button1_Click(object sender, EventArgs e) { Regex pattern = new Regex("^[a-zA-Z]{0,8}$"); if (pattern.IsMatch(textBox1.Text)) { button1.Text = "Submitted"; button1.Enabled = false; string name = textBox1.Text; int ver = 2013; MessageBox.Show("Hello " + name + "! Welcome to visual c# " + ver.ToString(), "Greeting"); } else if (string.IsNullOrEmpty(textBox1.Text.Trim()) || textBox1.Text == "") { MessageBox.Show("Please type a valid 8 character string on the textbox!"); } else { MessageBox.Show("Please type a valid 8 character string on the textbox!"); }