2017-10-06 3 views
-1

J'utilise UITableView pour afficher mes données. Mes données sont constituées d'une image et d'un texte. Le problème est lorsque je fais défiler le UITableView l'image disparaît.Image S'allume lorsque je fais défiler UITableView

Ceci est mon code:

func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return msgs.count 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! collCell 
    let msg = msgs[indexPath.row] 
    var decodeImgURL = "" 
    cell.lbl1.text = msg.content 

    decodeImgURL = msg.imgurl 

    if decodeImgURL == "none" { 
     cell.img.isHidden = true 
    } else { 

     let dataDecoded : Data = Data(base64Encoded:decodeImgURL,options: .ignoreUnknownCharacters)! 
     let decodedImage = UIImage(data: dataDecoded) 
     cell.img.image = decodedImage 

    } 

    return cell 
} 

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 

    let msg = msgs[indexPath.row] 

    if msg.imgurl == "none" { 
     return 64 
    } else { 
     return 207 
    } 

} 
+0

Le 'msg.content' dans' lbl1' disparaît-il également? – thedjnivek

+0

votre image apparaît même en premier lieu? –

+0

@thedjnivek non le lbl1 reste le même –

Répondre

0

Avec un UITableView, les seules cellules qui sont en mémoire sont les cellules visibles. Lorsque vous faites défiler une cellule de tableau hors de l'écran, elle est supprimée de la mémoire. Cela permet à la vue de la table de défiler plus rapidement. Le problème que vous rencontrez est que lorsque vous faites défiler la cellule du tableau hors de l'écran, la cellule (avec l'image) sont désalloués de la mémoire. Lorsque vous faites défiler la cellule sur l'écran, il est à nouveau alloué en mémoire. Je pense que votre problème pourrait provenir de l'un des deux problèmes suivants:

1) Il vous suffit d'attendre quelques secondes pour que votre image soit recréée dans la cellule.

2) Il y a peut-être un problème dans votre baie msgs. Si l'image n'apparaît pas après quelques secondes, essayez de placer un point d'arrêt juste après cette ligne: cell.img.image = decodedImage. Si ce point d'arrêt n'est pas atteint après avoir fait défiler votre cellule hors de l'écran puis de revenir sur l'écran, le problème est que le decodeImgURL (l'URL de votre image) est incorrect.

+0

je l'ai fait mettre le point d'arrêt sur 'cell.img.image = decodeImage' yaa toute la section est appelée lors du défilement mais il dosen't définir mon image –