7
votes

iPhone - Créer des bordures de haut et de fond uitaires personnalisées

Je cherche partout et je n'ai pas trouvé ma réponse.

Je peuplé une vision utile avec des cellules dynamiques de Json et j'essaie de cacher des cellules supplémentaires. J'ai éteint les séparateurs dans IB et, bien sûr, tous les séparateurs de cellules disparaissent. Comment puis-je ajouter une ligne au bas et au sommet de chaque TableViewCell afin que seules les cellules qui ont une information montrent une bordure? J'ai importé de quartz et j'ai joué avec Calayer mais je ne trouve pas de solution.

J'ai trouvé une question similaire ici, mais la seule réponse n'était pas très utile.

Que serait Soyez une façon meilleure et différente de faire cela?

Voici mon celltfrowortindexpath et mon numérosofrowsection: xxx


0 commentaires

5 Réponses :


0
votes

Il ressemble à une solution sous-optimale pour essayer de "distinguer" vos cellules valides de celles vides avec des lignes. Une approche supérieure serait de nettoyer la source de données avant de remplir la table avec elle.


3 commentaires

Je ne les crée pas, mais Xcode remplit dans l'espace vide de la table avec des cellules vides. Je ne crée que le nombre de cellules en numérosofrowsection égal au nombre d'objets de mon tableau de données. Actuellement, il existe deux objets et cellules créés, mais Xcode remplit dans le reste.


J'ai édité ma réponse. Je pourrais probablement vous aider à créer des lignes, mais cela sonne juste comme une si mauvaise idée ...


Je n'obtiens toujours pas ce que vous entendez par "nettoyer la source de données". Comment la source de données a-t-elle quelque chose à voir avec les pensionnaires sur un uableviewcell? Je ne crée que 2 cellules, Xcode fait le reste automatiquement, j'imagine parce que c'est des cellules prototypes. Je suis ouvert à n'importe quelle façon de faire ça



26
votes

Je pense aussi que ce n'est pas la meilleure idée, mais si vous voulez vraiment faire cela, voici le code qui permettra de réaliser ce que vous voulez: xxx

mettre ce code dans le TableView : CellfroworTindexpath: méthode . Le look final de votre utableview sera comme ceci:

table Vue avec des bordures sélectives

prendre en compte que ce n'est pas très bon pour la performance, surtout si vous avez beaucoup de cellules. Si vous avez une plus grande quantité de données, reportez-vous à cette question à la question pour obtenir de l'aide sur la manière d'optimiser le dessin.


6 commentaires

Merci pour l'aide. Quelle serait la meilleure façon de le faire? Je veux le faire est rapide que possible.


La meilleure façon serait de sous-classement utableviewcell et de remplacement de la méthode drawrect: avec le code dans ma question liée. Edit: Le code comme vous pouvez le voir dans la réponse avec plus de upvotes.


Je pense que vous devriez au moins essayer la méthode "plus facile" avant de continuer à optimiser la solution - vous pourriez trouver qu'il est assez rapide.


Ok merci, je regardais juste cette question liée. Cela a très bien fonctionné, même si j'ai besoin d'ajouter du remplissage à My TableViewCells pour s'adapter à mes vignettes ... mais c'est un problème différent. Je vais donner à la fois un tourbillon et voir ce qui est mieux. Merci beaucoup!!


Qu'est-ce que l'on permettrait une réorganisation des cellules? Comment résoudre le problème si l'utilisateur fait glisser la première rangée inférieure et une autre prend sa place?


Bonne réponse d'il y a longtemps ... Je ne sais pas si c'est un nouveau comportement depuis 2012, mais le début y coordonnée pour le cadre inférieur doit être cell.bound.size.SIZE .Height -1 Sinon, il s'agit de 1 "pixel" sous la cellule suivante et non visible si la cellule ci-dessous est opaque.



0
votes

Utiliser des cellules personnalisées. Votre DataSoure (modèles) doit piloter les informations dans les cellules personnalisées. Créez un setter dans la classe de cellules personnalisée pouvant être définie à chaque ligne. comme dans ....

  1. Allocation de votre cellule personnalisée avec une carte de réutilisation,

  2. Passez la propriété qui est en train de déterminer si la ligne doit indiquer:
    [Setomlines cellulaires: modèle.property];

  3. retourne la cellule;

    Vous aurez beaucoup plus de flexibilité pour concevoir le CustonScell ​​de toutes les manières de votre choix, des images, des lignes, des couleurs ou d'autres moyens de laisser votre utilisateur voir une différence entre vos cellules.

    Techniquement, la réponse de Marco fonctionnera et un bon travail sur une solution simple. Mais vous ne serez pas en mesure de développer cela beaucoup plus loin que cela cela.


0 commentaires

1
votes

Essayez uniquement Ceci à TableView: CellfornatDexPath: Code> Méthode

[cell.contentView.layer setBorderColor:[UIColor grayColor].CGColor];
[cell.contentView.layer setBorderWidth:1.0f];


1 commentaires

Serait bon, mais définit également la bordure gauche et droite qui n'est pas ce que veut.



0
votes

Ce n'est pas la réponse à la question, mais la solution propre pour le problème initial.

Ajoutez un uIView vide comme pied de page de l'utableview. Ensuite, les cellules vides seront cachées. Voir Cette réponse .


0 commentaires