2010-10-07 5 views
2

Dans mon programme, si je mets la ligne ci-dessous dans cellForRowAtIndexPath (Tableview), le défilement est bon. Sinon, les lignes sont écrasées. Je veux savoir ce que ce code a fait?Quelle est l'utilité de removeFromSuperView dans iphone?

Le code est ....

for (UIView *oldViews in cell.contentView.subviews) 
{ 
    [oldViews removeFromSuperview]; 
} 

Merci à l'avance

Répondre

11

Vous devez savoir que dans iOS, vous manipulez des "vues". Les vues sont des parties de l'interface utilisateur (images, étiquettes, entrées, etc.) ou un calque contenant. Au début du lancement, vous DEVEZ ajouter une vue à votre fenêtre. Ensuite, vous pouvez ajouter ajouter autant de vues que vous voulez sur votre vue.

Si vous ajoutez une vue B sur une vue A. Et la vue A sur la fenêtre.

sémantique est:

  • vue A est le superview de B
  • View B est une sous-vue de A
  • vue A est une sous-vue de la fenêtre
  • La fenêtre est le superview Donc, si vous invoquez removeFromSuperview sur B, vous supprimez B pour être sur A (et afficher).

S'il vous plaît noter:

Lorsque vous ajoutez un sous-vue (addSubview :) retain est effectuée sur le point de vue ajouté.

Lorsque vous supprimez une vue (removeFromSuperview: ou removeSubviewAtIndex :), une version est supprimée de la vue.

Pour répondre à la question initiale, vous

for (UIView *oldViews in cell.contentView.subviews) 
{ 
    [oldViews removeFromSuperview]; 
} 

Effectuer la méthode removeFromSuperview sur tous les cell.contentView subviews. Ainsi, les anciennes vues sont supprimées de l'écran mais pas nécessairement désallouées (elles sont libérées donc retainCount - 1).

0

Ensuite, il est simple

Chaque UIView intérieur "cell.contentView.subviews" (donc les sous-vues de cell.contentView), sont enlevés.

Il va les retirer du superview, et probablement appeler la méthode dealloc si le retainCount est 0.

0

Il supprime simplement tous les sous-vues de cell.contentView.

0

Chaque classe ou sous-classe UIView peut conserver ses hiérarchies de vue par addSubView :, et ces codes supprimeront toutes les sous-vues de cell.contentView.

Mais les instances de UITableViewCell sont souvent réutilisées par dequeueReusableWithIdentifier:. Ces codes vont supprimer toutes ses sous-vues, donc si elle doit être réutilisée, elle doit reconstruire toutes ses sous-vues à nouveau.