应用程序视图感觉像是“LAGGING”

时间:2010-01-16 22:52:19

标签: iphone uitableview controls cells

我的应用程序中的大多数视图都是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];
            }
}

3 个答案:

答案 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”