2016-05-27 6 views
-1

Vielleicht wird dieses Bild besser, das Problem habe ich jetzt erklären,UITableViewCell bekommt neue Etiketten auf Scroll

Und das ist der Code, den ich jetzt haben.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell! 

     let songAlbumImage = UIImageView() 
     let songSongName = UILabel() 

     songSongName.text = "\(indexPath.row + 1): \(self.songNames[indexPath.row])" 
     songSongName.frame = CGRectMake(80, 0, screenWidth-80, 75) 
     songSongName.font = UIFont(name: "ElliotSans-Regular", size: 18) 
     songSongName.textColor = UIColor.whiteColor() 
     songSongName.numberOfLines = 2 

     let url = NSURL(string: String(songAlbumCovers[indexPath.row])) 
     let data = NSData(contentsOfURL: url!) 

     if (data != nil) { 
      songAlbumImage.hnk_setImageFromURL(url!, placeholder: UIImage(named: "placeholder1.png"), format: Format<UIImage>(name: "image"), failure: { (error) ->() in }) { (image) ->() in 
       songAlbumImage.image = image 
      } 
     } else { 
      songAlbumImage.image = UIImage(named: "placeholder1.png") 
     } 

     songAlbumImage.frame = CGRectMake(0, 0, 75, 75) 


     cell.addSubview(songAlbumImage) 
     cell.addSubview(songSongName) 

     return cell 


    } 

ich nur das Etikett wollen zeigen, sobald

+0

Warum fügen Sie songAlbumImage und songSongName in CellforrowIndex hinzu? Jedes Mal, wenn Sie ein neues Label und ein neues Bild hinzufügen, erscheint das doppelt. Verwenden Sie customCell für diese –

+0

Zellen werden wiederverwendet. Sie sollten eine UITableViewCell-Unterklasse erstellen und die Bezeichnung & imageview hinzufügen. – Paulw11

+1

Es gibt einen Grund, warum Sie Zugriff auf den Schnittstellen-Builder haben, ** verwenden Sie ihn **. – luk2302

Antwort

1

Ich empfehle, UITableviewCell statt UIImageView und UILabel in CellForRowIndexPath Methode zu verwenden. Aber wie Par Code try für entfernen folgenden zwei for-Schleife hinzufügen UILabel und UIImageView bevor fügen Sie Zelle SubView:

Für UILabel:

for view in cell.subviews { 
     if let label = view as? UILabel { 
      label.removeFromSuperview() 
     } 
    } 

Für UIImageView:

for view in cell.subviews { 
     if let imgView = view as? UIImageView { 
      imgView.removeFromSuperview() 
     } 
    } 
+0

Vielen Dank, funktioniert! –

+0

Sie sind willkommen, aber bitte verwenden Sie diese Technik nicht, um diese Aufgabe auszuführen, sondern Sie müssen die Custom-Cell-Implementierung erlernen Die Verwendung von Custom-Cell ist der richtige Weg, um diese Art von Task mit UITableView auszuführen. –

0

Kurze Antwort: hinzufügen cell.contentView.subviews.forEach({ $0.removeFromSuperview() }) direkt nach let cell = ...

Lange Antwort: Die Zelle, sie "aus der Warteschlange entfernt" wird bedeutet, dass die Zelle so wie sie ist wiederverwendet wird. So wird eine alte Zelle mit einem alten Text wiederverwendet, und Sie müssen sie leeren, bevor Sie Ihre neuen Ansichten hinzufügen.

Eine weitere optimale Lösung wäre die Wiederverwendung der UILabel, aber Sie können sie entfernen und alles neu erstellen, wenn Sie möchten. Es wird nur eine weniger optimale Lösung sein.

+0

Scheint nicht zu funktionieren –

+0

Hinzugefügte Kommentare darüber, wie aus der Warteschlangenzelle funktioniert und was es bedeutet. Änderte auch ein wenig die Antwort. – Dean

0

Dies ist nicht eine optimale Lösung, aber können Sie versuchen, die dequeueReusableCellWithIdentifier nil?

+0

Wenn ich das versuche, bekomme ich den Fehler "Fehlendes Argument für Parameter 'forIndexPath.row' in Call –

+0

okay, ich kenne nur Obj C so bare mit mir. Erster Schritt make int rowVal = indexPath.row. Dann machen Sie eine NSString rowValString dass ist gleich rowVal aber als String (Beispiel @ "1"). Benutze nun den rowValString als Wiederverwendungs-Identifikator. Auf diese Weise erhält jede Zelle ihren eindeutigen Wiederverwendungs-Identifikator! Bitte aktualisiere mich, wenn du das machst. –

Verwandte Themen