2011-01-06 3 views
0

Comment peut-on modifier dynamiquement textLabel ou detailTextLabel d'un UITableViewCell spécifique? Fondamentalement, je télécharge un ensemble de fichiers à partir d'Internet chaque fois que l'utilisateur tape sur une cellule. Maintenant, au lieu de l'indicateur de progression, je voudrais afficher le nom du fichier en cours de téléchargement. Je voudrais continuer à mettre à jour detailTextLabel pour montrer les noms de fichiers (actuels) jusqu'à ce que tous les fichiers soient téléchargés.Mise à jour dynamique de UITableViewCell

Répondre

2

En supposant que vous êtes dans une méthode comme tableView:didSelectRowAtIndexPath: (ou une autre façon d'obtenir le chemin d'index à la cellule), vous pouvez faire quelque chose comme ceci:

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

UILabel *label = nil; 
for(UIView *subview in cell.contentView.subviews) { 
    if([subview isKindOf:[UILabel class]]) { 
     label = (UILabel*)subview; 
     break; 
    } 
} 

if(label) 
    label.text = @"New text"; 

Ceci trouvera la première UILabel dans la cellule, et peut ne pas fonctionner si votre cellule a plus d'une étiquette. Une méthode plus robuste consiste à définir l'étiquette de l'étiquette lorsque vous créez la cellule (cela peut être fait dans Interface Builder ou dans le code). Ensuite, vous pouvez trouver l'étiquette comme ceci:

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

UILabel *label = nil; 
for(UIView *subview in cell.contentView.subviews) { 
    if([subview isKindOf:[UILabel class]] && [subview tag] == kDetailLabelTag) { 
     label = (UILabel*)subview; 
     break; 
    } 
} 

if(label) 
    label.text = @"New text"; 
+0

Merci Costa !! – NSExplorer

0

Juste au cas où quelqu'un a encore ce problème, je l'ai eu du succès avec des appels à la méthode reloadData. Par exemple, dans mon code dans la méthode viewWillAppear, j'ai la ligne:

[tableSettings reloadData]; 

Où est tablesettings le nom de mon UITableView.