2009-04-08 19 views

risposta

1

Sì, non esiste attualmente un modo supportato per aggiungere un badge a una cella UITableView. In questo esempio, è molto probabile una sottoview personalizzata che contiene un'immagine e UILabel.

1

Vorrei aggiungere un'altra alternativa per creare badge personalizzati. CustomBadge è un po 'più potente. È aperto e gratis.

2

Come per me il modo più semplice è utilizzare cell.accessoryView. Si prega di guardare nel mio codice come ho fatto:

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; 

E il mio risultato:

enter image description here

Speranza che aiuta.

+0

Si prega di non pubblicare la stessa risposta a più domande: non è una buona idea per tutti o le domande sono duplicati che dovrebbero essere contrassegnati/chiusi come tali. –

+0

Se rende più facile la ricerca, non vedo molti problemi. A volte le domande duplicate vengono visualizzate per prime su Google e, anche se sono contrassegnate, a volte possono avere risposte migliori. – Samin

2

TDBadgedCell è una scelta piuttosto buona. Altamente personalizzabile per le tue esigenze.

4

Ecco un rapido miglioramento della risposta di @ POF. Non abbiamo bisogno di quanti più subviews e possiamo usare la matematica per supportare le cifre N, non solo 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 
} 

E il risultato (io uso un colore del marchio, ma la tua posso essere di qualsiasi colore):

uilabel badge

Problemi correlati