我的应用程序中的大多数视图都是UIViewController中的UITableVlews。我的应用程序感觉它在试图滚动表格时会滞后。我想知道(1.)是否更好地在表视图中创建单元格对象,或者在运行时创建它们并将它们添加到单元格子视图中?
实施例:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
case 3:
{
NSNumber *tetherState = [[mobIntDict objectForKey:@"State"] intValue];
NSNumber *currValState = [[NSNumber numberWithInt:1023] intValue];
tetherSw = [[UISwitch alloc] initWithFrame:CGRectMake(197, 8, 94, 27)];
tetherSw.tag = kDefaultSwTag;
if(tetherState == currValState){
tetherSw.on = YES;
}else{
tetherSw.on = NO;
}
[tetherSw addTarget:self action:@selector(tetherSwAction:) forControlEvents:UIControlEventValueChanged];
[cell.contentView addSubview:tetherSw];
cell.textLabel.text = @"Tether";
[tetherSw release];
}
break;
}
- 或 -
-(void)viewDidLoad{
tetherSw = [[[UISwitch alloc] initWithFrame:CGRectMake(197, 8, 94, 27)] autorelease];
tetherSw.tag = kDefaultSwTag;
[tetherSw addTarget:self action:@selector(tetherSwAction:) forControlEvents:UIControlEventValueChanged];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
case 3:
{
[cell addSubView:tetherSw];
}
}
答案 0 :(得分:1)
没关系。您的单元格很复杂,因此您的视图滞后。
如果您想要表现,请避开UISwitch
。切换单元格的复选标记。实际上,只需避免任何花哨的表视图单元格子类或自定义背景,以减小视图层次结构的大小。
答案 1 :(得分:1)
您是否正确排队并重复使用单元格?
如果重新使用一个单元格,比如@“SwitchCell”,它可以大大优化事物,这会加快滚动速度。目前,将大量时间用于将切换添加到单元的内容视图(布置视图等),并执行仅需要在单元生存期中发生一次的其他任务,而不是每次在滚动时出现新单元。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Create cell
static NSString *CellIdentifier = @"SwitchCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UISwitch *tetherSw = [[UISwitch alloc] initWithFrame:CGRectMake(197, 8, 94, 27)];
tetherSw.tag = kDefaultSwTag;
[tetherSw addTarget:self action:@selector(tetherSwAction:) forControlEvents:UIControlEventValueChanged];
[cell.contentView addSubview:tetherSw];
[tetherSw release];
}
// Setup for each cell
cell.textLabel.text = @"Tether";
NSNumber *tetherState = [[mobIntDict objectForKey:@"State"] intValue];
NSNumber *currValState = [[NSNumber numberWithInt:1023] intValue];
UISwitch *tetherSw = (UISwitch *)[cell.contentView viewWithTag: kDefaultSwTag];
tetherSw.on = (tetherState == currValState);
// Return
return cell;
}
有关出列的详细信息,请参阅dequeueReusableCellWithIdentifier的文档。
此外,请确保您的任何单元格子视图中没有透明度。这导致了很多滞后。确保您添加的任何标签或其他任何内容都包含opaque = YES
和背景颜色。
答案 2 :(得分:0)
实际上,我的表设置得很好。一个可靠的恢复功能,我的应用程序运行时没有上述“LAG”