2009-04-08 8 views

Répondre

1

Oui, il n'existe actuellement aucun moyen d'ajouter un badge à une cellule UITableView. Dans cet exemple, il s'agit probablement d'une sous-vue personnalisée contenant une image et UILabel.

1

Je voudrais ajouter une autre alternative pour créer des badges personnalisés. CustomBadge est un peu plus puissant. C'est ouvert et gratuit.

2

Pour moi le plus simple est d'utiliser cell.accessoryView. S'il vous plaît regarder dans mon code que je l'ai fait:

UIImageView * commentsViewBG = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @"counter1.png"]]; 
commentsViewBG.frame = CGRectMake(
    commentsViewBG.frame.origin.x, 
    commentsViewBG.frame.origin.y, 30, 20); 


UILabel *commentsCount; 
if (commentsArray.totalCount < 10) 
    commentsCount = [[UILabel alloc]initWithFrame:CGRectMake(10, -10, 40, 40)]; 
else if (commentsArray.totalCount < 100) 
    commentsCount = [[UILabel alloc]initWithFrame:CGRectMake(5, -10, 40, 40)]; 
else if (commentsArray.totalCount < 1000) 
{ 
    commentsViewBG.frame = CGRectMake(
     commentsViewBG.frame.origin.x, 
     commentsViewBG.frame.origin.y, 40, 20); 
    commentsCount = [[UILabel alloc]initWithFrame:CGRectMake(5, -10, 40, 40)]; 
} 
commentsCount.text = [NSString stringWithFormat:@"%ld",(long)commentsArray.totalCount]; 
commentsCount.textColor = [UIColor whiteColor]; 
commentsCount.backgroundColor = [UIColor clearColor]; 
[commentsViewBG addSubview:commentsCount]; 
cell.accessoryView = commentsViewBG; 

Et mon résultat:

enter image description here

Hope it helps.

+0

Veuillez ne pas poster exactement la même réponse à plusieurs questions: soit ne convient pas à tous, soit les questions sont des doublons qui doivent être signalés/fermés comme tels. –

+0

Si c'est plus facile à trouver, je ne vois pas beaucoup de problèmes. Parfois, les questions en double apparaissent d'abord sur Google, et même si elles sont signalées, elles peuvent parfois avoir de meilleures réponses. – Samin

2

TDBadgedCell est un très bon choix. Hautement personnalisable pour vos besoins.

4

Voici une amélioration rapide de la réponse @ POF. Nous ne avons pas besoin autant subviews et nous pouvons utiliser les mathématiques pour supporter N chiffres, non seulement 1-3:

func setDiscountBadge(count: Int) { 
    let size: CGFloat = 26 
    let digits = CGFloat(count("\(number)")) // digits in the label 
    let width = max(size, 0.7 * size * digits) // perfect circle is smallest allowed 
    let badge = UILabel(frame: CGRectMake(0, 0, width, size)) 
    badge.text = "\(number)" 
    badge.layer.cornerRadius = size/2 
    badge.layer.masksToBounds = true 
    badge.textAlignment = .Center 
    badge.textColor = UIColor.whiteColor() 
    badge.backgroundColor = cfg.UIColors.brand 
    YOURCELL.accessoryView = badge // !! change this line 
} 

Et le résultat (j'utilise une couleur de la marque, mais la vôtre peut être une couleur):

uilabel badge