mamcx
mamcx

Reputation: 16196

How to solve slow scrolling in UITableView

I'm testing for the first time on a real device, and after fixing some obvious performance problems, I'm stuck on how do smooth scrolling.

This is what I do:

e.g.

Header A Ids= 1,2; Header B Ids= 3,4

This is the code on the loading of the cell:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"ProductCell";

    ProductCell *cell = (ProductCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ProductCell" owner:self options:nil];

        cell = [nib objectAtIndex:0];
    }

    // Set up the cell...
    Product *p = [self locateRecord:indexPath]; 

    cell.nameLabel.text = [p.name capitalizedString];
    cell.codeLabel.text = p.ref;

    if ([self.selectedProducts objectForKey:[NSNumber numberWithInt:p.Id]]) {
        OrderDetail *d = [self findDetail:p];

        cell.qty.text = [NSString stringWithFormat:@"%ld",[d.qty integerValue]];
    }

    return cell;
}

- (id) locateRecord:(NSIndexPath *)indexPath {
    NSNumber *theId;
    NSUInteger pos = [indexPath row];

    id o;

    if (self.results) { 
        theId = [self.results objectAtIndex:pos];
    } else {
        NSString *key = [[self.index objectAtIndex:[indexPath section]] objectAtIndex:0];
        NSArray *data = [self.cache objectForKey:key];

        theId =  [data objectAtIndex:pos];
    }   

    Db *db= [Db currentDb];

    o = [db loadById:[self returnItemClass] theId:[theId intValue]];

    return o;
}

Upvotes: 8

Views: 6059

Answers (1)

Can Berk Güder
Can Berk Güder

Reputation: 113370

  1. Preload the data
  2. Do your own drawing

Upvotes: 5

Related Questions