2010-11-17 4 views
6

Je dois ajouter un biseau à mes UITableViewCell (ligne blanche en haut, ligne sombre en bas). J'ai déjà ajouté une CAGradientLayer en tant que sous-vue de ma cellule.layer. Malheureusement, je ne peux pas utiliser UIImageView comme arrière-plan pour mes cellules, donc cela devra être fait dans le code. Aucune suggestion? Merci!Comment ajouter Biseau à UITableViewCell

Ceci est le code que j'ai maintenant pour mon fond de cellule.

CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 
gradientLayer.frame = cell.frame; 
gradientLayer.colors = [NSArray arrayWithObjects: 
    (id)[[UIColor colorWithRed:0.988 green:0.988 blue:0.988 alpha:1.0] CGColor], 
    (id)[[UIColor colorWithRed:0.9294 green:0.9294 blue:0.949 alpha:1.0] CGColor], 
    nil]; 
[cell.layer insertSublayer:gradientLayer atIndex:0]; 

Cela semble bien, mais je voudrais avoir une ligne sombre 1 pixel sur le fond et une ligne blanche 1 pixel sur le dessus pour finir le look.

Répondre

6

Vous pouvez, et vous devriez probablement utiliser un UIImageView comme fond de cellule. Ce que vous faites actuellement est en fait tout à fait faux.

Un UITableViewCell se compose de quelques vues dans un hiarchy, il est important de savoir où vous êtes censé accrocher dans vos vues. Cette hiérarchie est la suivante:

  • UITableViewCell - Ne touchez jamais cet
    • backgroundView - Replace définir votre arrière-plan personnalisé pour toutes les lignes.
    • selectedBackgroundView - Remplacer pour définir un arrière-plan personnalisé pour les lignes sélectionnées/mises en surbrillance.
    • contentView - Ne pas régler ceci mais n'hésitez pas à ajouter autant de sous-vues que vous le souhaitez.
      • titleLabel
      • detailTitleLabel
      • imageView
      • vos propres vues
    • accessoryView

Il n'est pas évident dès le départ comment remplacer le backgroundView et le selectedBackgroundView. Le UITableView lui-même les définira automatiquement après que vous avez renvoyé la cellule de la méthode de source de données -[tableView:cellForRowWithIndexPath:]. Ce qui signifie que tout ce que vous définissez ici sera toujours remplacé.

L'astuce consiste à implémenter la méthode -[tableView:willDisplayCell:forRowAtIndexPath:] délégué, et définir votre arrière-plan personnalisé ici.

Tout cela est assez bien expliqué dans le Table View Programming Guide.

+0

PeyloW, merci beaucoup! Je vais changer mon code en conséquence, j'apprécie l'info! – NSAlexC

+0

PeyloW, merci cela a bien fonctionné. J'ai lu le doc pomme et je me sens beaucoup mieux à ce sujet maintenant. Merci encore! – NSAlexC

+0

@ziggie: Mon plaisir - n'oubliez pas de marquer une réponse comme acceptée une fois que votre problème a été résolu.Aide les autres à trouver la solution plus rapidement et aide à motiver ceux qui ont répondu. – PeyloW

1

Jetez un oeil à this link. Vous pouvez ignorer l'effet de brillant, mais sinon je pense que c'est ce que vous voulez.

+0

Vous basculez slycrel! Cela fonctionne maintenant. – NSAlexC

+0

Ce lien ne semble pas fonctionner. –

+0

Lien mis à jour pour être (espérons-le) plus permanent. – slycrel

Questions connexes