2009-04-08 31 views

Respuesta

1

Sí, actualmente no hay forma admitida de agregar una insignia a una celda UITableView. En este ejemplo, lo más probable es que sea una subvista personalizada que contenga una imagen y UILabel.

1

Me gustaría agregar otra alternativa para crear insignias personalizadas. CustomBadge es un poco más poderoso. Está abierto y gratis.

2

En cuanto a mí la forma más simple es usar cell.accessoryView. Por favor mirar en mi código de cómo lo hice:

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; 

Y mi resultado:

enter image description here

espero que ayude.

+0

No publiques exactamente la misma respuesta a varias preguntas: o no es una buena opción para todos o las preguntas son duplicados que deben marcarse/cerrarse como tales. –

+0

Si lo hace más fácil de encontrar, no veo mucho problema. A veces, las preguntas duplicadas aparecen primero en Google, e incluso si están marcadas, a veces pueden tener mejores respuestas. – Samin

2

TDBadgedCell es una muy buena opción. Altamente personalizable para sus necesidades.

4

Aquí hay una mejora rápida de la respuesta de @ POF. No necesitamos tantos subvistas y podemos usar las matemáticas para apoyar N dígitos, no sólo 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 
} 

Y el resultado (yo uso un color de la marca, pero el suyo puede ser de cualquier color):

uilabel badge

Cuestiones relacionadas