2014-09-30 15 views
11

i AccesoryView hücrelerine eklenmiş bir badgeView oluşturmak istiyorum. Bunun geçmişte oldukça fazla talep edildiğini biliyorum, ancak bu github alt sınıfları modası geçmiş gibi görünüyor ve hızlı bir projeye dönüştürülemiyor. Hızlı bir projede IOS'ta bunu yapmanın en kolay yolu nedir? BöyleUITableViewCell'deki rozeti görüntüle

şey şu şekildedir:

enter image description here

+0

enter image description here
? – AlBlue

+1

https://github.com/tmdvs/TDBadgedCell – gamerChristian

+0

UITableViewCell'i özelleştirmeniz gerekeceğini düşünüyorum. Swift ile nasıl yapılacağından emin değilim, ancak Objective-C için internette öğretici ton bulabilirsiniz. İşte, http://www.appcoda.com/customize-table-view-cells-for-uitableview/ –

cevap

3

CellForRowAtIndexPath

var accesoryBadge = UILabel() 
    var string = "2" 
    accesoryBadge.text = string 
    accesoryBadge.textColor = UIColor.whiteColor() 
    accesoryBadge.font = UIFont(name: "Lato-Regular", size: 16) 
    accesoryBadge.textAlignment = NSTextAlignment.Center 
    accesoryBadge.layer.cornerRadius = 4 
    accesoryBadge.clipsToBounds = true 

    accesoryBadge.frame = CGRectMake(0, 0, WidthForView(string, font: UIFont(name: "Lato-Light", size: 16), height: 20)+20, 20) 
    cell.accessoryView = accesoryBadge 
+0

Bu oldukça aşçıdır. Bunu bir Swift 2.0 projesinde uygulamaya çalıştım. Ancak "WidthForView" mevcut değil. –

+0

func widthForView (_ text: String, font: UIFont, height: CGFloat) -> CGFloat { let etiketi: UILabel = UILabel (çerçeve: CGRect (x: 0, y) dizesinin genişliğini hesaplamak için bir çözüm sağlayabilir misiniz? 0, genişlik: CGFloat.greatestFiniteMagnitude, yükseklik: yükseklik)) label.numberOfLines = 1 label.lineBreakMode = NSLineBreakMode.byWordWrapping label.font = tipi label.text = metin label.textAlignment = .center etiketi. sizeToFit() return label.frame.width } –

25

Aşağıdaki kod -iOS7 ve iOS8 içinde test edilmiş bu kodu kullandım ve çalışır:

  1. > Sıfır sayılırsa, sayımın beyaz metinde yeniden gösterilecektir. etrafında d rozeti.
  2. Sayım = sıfır ise, basit bir açıklama göstergesi gösterir.



'o github alt sınıflar' sen kastediyoruz

- (void)updateTableViewCell:(UITableViewCell *)cell forCount:(NSUInteger)count 
    { 
     // Count > 0, show count 
     if (count > 0) { 

      // Create label 
      CGFloat fontSize = 14; 
      UILabel *label = [[UILabel alloc] init]; 
      label.font = [UIFont systemFontOfSize:fontSize]; 
      label.textAlignment = NSTextAlignmentCenter; 
      label.textColor = [UIColor whiteColor]; 
      label.backgroundColor = [UIColor redColor]; 

      // Add count to label and size to fit 
      label.text = [NSString stringWithFormat:@"%@", @(count)]; 
      [label sizeToFit]; 

      // Adjust frame to be square for single digits or elliptical for numbers > 9 
      CGRect frame = label.frame; 
      frame.size.height += (int)(0.4*fontSize); 
      frame.size.width = (count <= 9) ? frame.size.height : frame.size.width + (int)fontSize; 
      label.frame = frame; 

      // Set radius and clip to bounds 
      label.layer.cornerRadius = frame.size.height/2.0; 
      label.clipsToBounds = true; 

      // Show label in accessory view and remove disclosure 
      cell.accessoryView = label; 
      cell.accessoryType = UITableViewCellAccessoryNone; 
     } 

     // Count = 0, show disclosure 
     else { 
      cell.accessoryView = nil; 
      cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
     } 
    } 
İlgili konular