2010-04-09 7 views
1

J'utilise le code de cellule de vue de tableau personnalisé d'Apple et je modifie le code drawRect dans la vue de la cellule pour qu'il ressemble à ce que je veux. Je l'ai changé pour avoir UILabels ainsi qu'un UIProgressView.Personnalisé UITableViewCell ne masque pas correctement les vues

Si les données sur lesquelles la cellule est en cours de construction n'ont pas un certain champ, je veux que le UIProgressView soit caché. Cela fonctionne pendant un petit moment, mais lorsqu'une cellule est mise en attente de défilement, la vue de progression recommence à s'afficher, même si je la mets à hidden = YES. J'ai essayé juste de ne pas créer le ProgressView à moins que les données étaient là et cela n'a pas fonctionné non plus.

Je pensais que la réponse était dans [self setNeedsDisplay] mais cela ne semble pas aider.

Voici le code pour le progressview de drawRect qui continue à afficher:

UIProgressView *c1Progress = [[UIProgressView alloc]initWithFrame:CGRectMake(20.0, 70.0, 280.0, 12.0)]; 
float iProgress = (value/target); 
c1Progress.progress = iProgress; 
if (!dataExists) { 
    c1Progress.hidden = YES; 
} 
[self addSubview:c1Progress]; 
[c1Progress release]; 

Répondre

1

Vous ne voulez certainement pas ce code dans drawRect. Vous devez allouer/init votre UIProgressView et l'ajouter en tant que sous-vue dans votre sous-classe UITableViewCell init (et assurez-vous de le libérer en dealloc).

La logique pour la mise en c1Progress.progress et c1Progress.hidden devrait aller dans une méthode qui est appelée uniquement lorsque value, target ou dataExists changements. Si vous avez une méthode setter pour la donnée/valeur en question, ce serait un bon endroit pour cela.

+0

Merci pour dataExists, qui ont fait il. J'ai déplacé c1Progress dans une variable de classe, l'ai instanciée dans la méthode init et j'ai défini les valeurs dans la méthode de définition de données. C'est ma première tentative de programmation personnalisée de tableviewcell et je veux m'assurer que je le fais bien, donc j'ai de jolies tables de défilement! – adamweeks

1

vérifier la valeur ... et l'imprimer dans NSLog et si ce morceau de code exécuter à chaque fois ... supprimer de drawRect ... initialize et libérer une seule fois ...

+0

La valeur de dataExists est correctement définie et le code de définition de hidden = YES s'exécute. Je mets un point d'arrêt dessus et ça se passe comme prévu. – adamweeks

Questions connexes