2011-11-28 4 views
0

Dans une autre question, il a été dit de recharger uniquement les UITableViewCells nécessaires au lieu de la table entière.Comment recharger un UITableViewCell

Comment cela peut-il être fait. Je dois dire, actuellement, je suis un peu désemparé, car mes cellules personnalisées ne sont pas "directement" liées à une tableView. Je les instancie dans la méthode cellForRowAtIndexPath.

//default 
     static NSString *CellIdentifier = @"Cell"; 

     TwoRowCell *cell = (TwoRowCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) { 

      NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TwoRowCell" owner:self options:nil]; 
      cell = (TwoRowCell *)[nib objectAtIndex:0]; 
     } 

     // Configure the cell... 

     cell.title.text = [dict objectAtIndex:indexPath.row]; 
     cell.value.text = @""; 

     return cell; 

comment puis-je avoir accès aux cellules et recharger uniquement la cellule. Idée: avoir des méthodes déléguées et là lors de la mise à jour d'une cellule recharger la cellule. Actuellement, je recharge toute la table.

BR, mybecks

Répondre

2

Il suffit d'appeler reloadData sur votre table - qui ne pas la table recharge tout, il ne les cellules recharge qui sont (ou plus exactement devraient devenir) visibles. Les cellules sont directement liées à la table et cellForRowAtIndexPath est le pont. C'est ce que le système appelle pour déterminer comment afficher une cellule. Par exemple, cette méthode est appelée plusieurs fois lorsque vous faites défiler. Dans une situation antérieure, j'ai appelé reloadRowsAtIndexPaths pour recharger seulement une (ou plusieurs) cellule (s) particulière (s). Dans ce cas, j'avais un bouton sur la cellule, et je voulais désactiver le bouton après avoir été cliqué une fois.

2

Si certaines de vos données ont changé, vous pouvez appeler - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation sur votre UITableView pour recharger uniquement ce UITableViewcell. Il appellera à nouveau cellForRowAtIndexPath.