用CollectionView画了一个课程表界面,但是在上下滑动以后前面的第几节课的标号会出现“残影”。
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
UILabel *classNum = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 25, CellHieght)];
if (indexPath.row == 0) {
cell.backgroundColor = [UIColor whiteColor];
classNum.text = [NSString stringWithFormat:@"%ld", indexPath.section + 1];
classNum.font = [UIFont systemFontOfSize:12];
classNum.textAlignment = NSTextAlignmentCenter;
[cell addSubview:classNum];
}
else{
cell.backgroundColor = [UIColor lightGrayColor];
}
return cell;
还请各位指教,个人感觉应该是没有reuse的问题
GitHub地址在这: https://github.com/DavidHu0921/ClassBoxForCityDLUT
问题代码在Controller/ClassCalendar/test里面
1
DavidHu OP 唉?Markdown语法为什么不稳定啊,打了tab还是不显示成代码格式……
|
3
ycge234 2015-05-08 18:03:44 +08:00 1
1)不使用可复用的cell
2)每次遍历cell删除所有子节点 |
4
Elethom 2015-05-08 18:06:24 +08:00 1
不想解釋,請回去看基礎部分。Reuse 機制你都不清楚。
|
5
PhilCai 2015-05-08 18:32:15 +08:00 via iPhone 1
[cell addSubview:classNum];就是这句话
|
6
cheng4741 2015-05-08 18:32:15 +08:00 1
你这复用的什么鬼,每次复用cell都重新加个lable上来
|
9
engin 2015-05-09 16:26:04 +08:00 1
对你的label做一个标记tag,不用每次都充分添加。
``` NSInteger numberLabelTag = 1024; UILabel *classNum = (UILabel*)[cell viewWithTag:numberLabelTag]; if (indexPath.row == 0) { if (nil==classNum) { classNum = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 25, CellHieght)]; classNum.tag = numberLabelTag; [cell addSubview:classNum]; } cell.backgroundColor = [UIColor yourColor]; cell.backgroundColor = [UIColor whiteColor]; classNum.text = [NSString stringWithFormat:@"%ld", indexPath.section + 1]; classNum.font = [UIFont systemFontOfSize:12]; classNum.textAlignment = NSTextAlignmentCenter; } else{ classNum.hidden = YES; cell.backgroundColor = [UIColor lightGrayColor]; } ``` |
10
newtonisaac 2015-05-10 01:06:35 +08:00 via iPad
@engin 兄台iOS哪里学的?
|
11
DavidHu OP @engin 这样会造成滚动后前面的数字消失。我目前的办法是新建一个cell,然后引入,再添加到collection 里面,在else里面写一句classNum.text = nil,就没有问题了。
感谢回复 |
13
engin 2015-05-10 10:04:33 +08:00
@newtonisaac 《iOS三天速成》 —_—
|