2016-08-05 2 views
0

Je calcule la hauteur de la cellule dans programatically heightForRowAtIndexPath-Problème Lors de trouver la hauteur de UITableViewCell

Ma méthode complète est:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    id cell = [self.tableView dequeueReusableCellWithIdentifier:kCellID]; 

    if([cell isKindOfClass:[Custom class]]) 
    { 
     return 100; 
    } 
    else 
    { 
     return 20; 
    } 
} 

Mon application prend 3-5 sec pour afficher les ViewController. Bien que cellForRowAtIndexPath est appelé et je peux afficher les journaux dans la console.

Mais mon ViewController n'est pas chargé.

Quand il suffit de retourner la hauteur en utilisant cette application de code fonctionne très bien:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    return 100; 
} 

Je ne sais pas qui est le problème avec cette ligne:

id cell = [self.tableView dequeueReusableCellWithIdentifier:kCellID]; 

Ce que je me manque dans ce numéro ?

+0

voir ce http://stackoverflow.com/questions/18206448/how-can-i-get-the-height-of-a-specific-row-in-my-uitableview et http://stackoverflow.com/questions/13968316/get-uitableviewcells-height-after-setting-height-for-each-eachableviewcell –

+0

@ Anbu.Karthik J'ai besoin de trouver le type de cellule car j'ai deux types de cellules . c'est le problème principal. Chaque fois que j'utilise le code pour trouver le type de cellule, mon application commence à faire des retards – Dalvik

+2

Pourquoi n'utilisez-vous pas une propriété isTableViewWithCustomCells ou isTableViewWithOtherCustomCells? Cela devrait être plus rapide. et je pense que 'heightForRowAtIndexPath:' peut être appelé avant cellForRowAtIndexPath et le stuff dequeue. – Larme

Répondre

0

Vous avez une certaine logique dans la méthode cellForRowAtIndexPath: qui détermine le type de cellule que cette ligne doit être. Ajoutez cette logique dans la méthode heightForRowAtIndexPath: pour déterminer la hauteur de chaque ligne.

0

Votre cette ligne est mauvaise

id cell = [self.tableView dequeueReusableCellWithIdentifier:kCellID]; 

il forcera votre cellule à réutiliser.

Utilisez

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    id cell=[tableView cellForRowAtIndexPath:indexPath]; 

    if([cell isKindOfClass:[CustomCellClass class]]) 
    { 
     return 100; 
    } 
    else 
    { 
     return 20; 
    } 
}