我遇到表视图及其响应问题,因为每个单元格都有scrollView,其中包含72个标签。我知道scrollView需要首先加载所有元素,然后加载到屏幕上,并且由于该表视图很慢,但是每次创建标签时是否有可能不分配和调用initWithFrame方法?我试图重复使用不同框架的标签,但它不起作用。
以下是我需要以某种方式优化以更快地创建标签的代码。
int listSize = 36;
for(int i=0;i<listSize;i++){
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0+i*200, 0, 200, 80)];
label.text = @"HELLO";
label.textColor = [UIColor blackColor];
label.backgroundColor = [UIColor clearColor];
label.textAlignment = NSTextAlignmentCenter;
label.font = [UIFont fontWithName:@"ArialMT" size:18];
[scrolView addSubview:label];
UILabel *grayBorderInFront = [[UILabel alloc] initWithFrame:CGRectMake(2+i*200, 5, 1, scrolView.frame.size.height-10)];
grayBorderInFront.text = @"";
grayBorderInFront.backgroundColor = [UIColor lightGrayColor];
[scrolView addSubview:grayBorderInFront];
}
答案 0 :(得分:0)
将标签保存在数组中,然后将它们添加到视图中。或者你甚至可以缓存整个滚动视图。
编辑: 您保留正在更新的值列表。对于在scrollview中创建的所有标签,您可以设置标签label1.tag = 4; (从1而不是0开始,因为0是默认值,其他视图也有它)。
然后,在您的cellForViewAtIndexPath中,而不是每次都创建一个新标签,您将获得带有[cell viewWithTag:]的标签,并获得标签的引用。您唯一需要做的就是更改标签的值。您还可以将标记用作数组中的索引:
int index = 3; // third label
[(UILabel*)[cell viewWithTag:index+1] setText:[myLabelsArray objectAtIndex:index]];
答案 1 :(得分:0)
您总是可以拥有一个TableView,而且每个Cell都有一个水平的CollectionView。
将滚动方向属性设置为水平,并使用UIViewCollectionFlowLayout
CollectionView将保证您的标签(即单元格)正在被重复使用,并确保您正在高效地完成工作。
答案 2 :(得分:0)
几周前,我使用带有自定义布局的collectionView为iPhone应用程序实现了EPG布局。 在iPad应用程序上,其他开发人员使用带有collectionView流程布局数组的scrollView实现了EPG。
自定义布局工作更好。
您提到需要iOS 5,因此您可以尝试以下开源替换到集合视图: https://github.com/steipete/PSTCollectionView