2009-03-30 9 views
8

Je teste pour la première fois sur un périphérique réel, et après avoir corrigé certains problèmes de performance évidents, je suis coincé sur la façon dont le défilement lisse.Comment résoudre le défilement lent dans UITableView

C'est ce que je fais:

  • Les données sont dans sqlite
  • J'ai un petit tableau avec l'en-tête
  • j'ai dans chaque tableau d'en-tête de la liste de numéro d'identité de la Db

par exemple

En-tête A Ids = 1,2; tête B Ids = 3,4

  • Je charge la cellule paresseuse & l'objet pour obtenir les données
  • peine 10 articles sont chargés à un moment
  • Le chargement est rapide, le défilement est uniquement une question

C'est le code de la charge de la cellule:

- (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; 
} 

Répondre

5
  1. précharger les données
  2. Do your own drawing
+0

ce à dire qui est un non-non générateur d'interfaces d'utilisation pour la mise en page des cellules? – mamcx

+0

Si vous voulez des vitesses de défilement similaires à Twitter, alors soyez mon invité. Si vous voulez que vos tableaux défilent comme du beurre, faites votre propre dessin. =) –

+0

Je sais que ça semble effrayant, mais ce n'est pas difficile du tout. –

Questions connexes