【发布时间】:2015-08-13 16:13:54
【问题描述】:
这是我的cellForItemAtIndexPath 代码:
static NSString *cellIdentifier = @"Cell";
MyCustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
//do stuff, set label text
if (indexPath.section == 0) cell.label.text = [words1 objectAtIndex:indexPath.row];
else if (indexPath.section == 1) cell.label.text = [words2 objectAtIndex:indexPath.row];
else if (indexPath.section == 2) cell.label.text = [words3 objectAtIndex:indexPath.row];
return cell;
我在viewDidLoad注册单元格类型:
[_collectionView registerClass:[MyCustomCell class] forCellWithReuseIdentifier:@"Cell"];
我在我的故事板中设置了我的集合视图,委托和数据源正常链接。
现在我的问题...我有两种方法,都有问题。我有 3 个部分,每个部分都来自一个独特的数据数组。
获取所需数据后,我使用
[_collectionView reloadData]。这会根据数组计数加载正确数量的单元格,但不会填充屏幕外的单元格。所以当我在屏幕上滚动它们时,它们没有设置标签。-
我尝试使用以下代码(每个部分一次)在获取数据(首选路线)时重新加载每个部分:
[self.collectionView performBatchUpdates:^{ [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]]; } completion:nil];
但是,使用此方法的问题在于,在重新加载后,它会用正确数量的单元格填充我的集合视图,但单元格本身是空白的,标签上没有设置文本。
在这两种情况下,如果我在屏幕上、屏幕外滚动并再次打开非加载单元格,它们就会加载。但你第一次看到它们时,它们并没有。
【问题讨论】:
-
此代码表示只在给定部分的前 3 个单元格上设置标签,因此您的问题出在 cellForRowAtIndexPath 中。您可能是指 indexPath.section ==0 { cell.label.text = @"text" }
-
1. else if (indexPath.row == 2) cell.label.text = @"这里的文字";。所以第 4 行没有标签。
-
尝试使用 NSString 为您拥有的所有单元格创建一个数组。如您所见,4 行的单元格不会显示任何文本。并且此代码适用于您的所有部分(您不检查单元格的部分)
-
哎呀!我是个大笨蛋,打错字了。大脑现在处于运转状态,请参阅我更正的代码。我一直在按照部分从数组中设置文本。对此感到抱歉。
-
你能把你的项目上传到github吗?
标签: ios objective-c uicollectionview reloaddata