2017-07-08 2 views
1

J'aimerais savoir quel est le moyen le plus propre de supprimer une vue d'une vue de pile si une certaine propriété de mon modèle de données est nil. J'ai une vue de table qui est peuplée par des cellules prototypes. Ils ressemblent à ceci:Comment masquer une vue d'une vue de pile en mode tableau Méthode déléguée cellForRow

enter image description here

Le second texte de l'étiquette contient une valeur facultative qui peut être nil; Je veux cacher l'étiquette si elle est nulle. Dois-je appeler removeArrangedSubview à l'intérieur de la méthode de cellule de vue de table cellForRow ou à l'intérieur de la classe CustomTableViewCell avec une fonction?

Répondre

1

Je veux cacher l'étiquette si [valeur facultative] est nil

Vous devez définir l'étiquette de hidden propriété à true plutôt que de le retirer de la liste de sous-vue disposés de mise en page de la pile afin d'éviter l'ajouter de retour lorsque la cellule est réutilisée pour une rangée différente.

C'est surtout une question de préférence où vous le faites. Si la plupart de votre code de configuration cellulaire est dans la fonction cellForRow, vous devez masquer et afficher l'étiquette de cette fonction ainsi:

if let labelText = model.getTextForMyLabel(indexPath.row) { 
    cell.label.text = labelText 
    cell.label.hidden = false 
} else { 
    cell.label.hidden = true 
} 

Si vous avez un setter pour le texte d'étiquette dans le code de votre CustomTableViewCell, vous pouvez utilisez la même approche pour définir la propriété hidden de l'étiquette avec son text.

+0

Merci! Question très rapide: les étiquettes ont-elles un setter pour leur propriété 'text' appelée chaque fois que je mets à jour leur texte? – Cesare

+0

@Cesare Il y a de fortes chances que le paramètre setter de la propriété 'text' de l'étiquette vérifie si le texte d'étiquette actuel correspond au nouveau texte que vous essayez de définir et saute le paramètre actuel si le nouveau texte est le même que le texte actuel . – dasblinkenlight