2017-10-17 2 views
1

I 2 structs wie unten angegeben habe:kann das Bild nicht richtig passieren tableviewcell

struct ProductImage { 
    let id : String 
    let url : URL 
    let isDefault : Bool 
} 

struct Product { 
    let name : String 
    let id : String 
    var images = [ProductImage]() 

    init(name : String, id: String) { 
     self.name = name 
     self.id = id 
    } 

    mutating func add(image: ProductImage) { 
     images.append(image) 
    } 
} 

Jetzt habe ich eine Kollektion, die einige Zellen auf sie mit jeweils ein Bild und ein Namensschild und eine ID damit beschriften. Es hat auch eine Schaltfläche und wenn ich darauf klicke, wird das Bild in der Collectionview-Zelle und auch der Name und die ID in einer TableView-Zelle angezeigt und in einem Array gespeichert. Nach der Rückkehr und dem Klicken des Knopfes des 2. collectionview Gegenstandes, sehe ich jetzt 2 Zellen (1. und 2.). Dass ich wie so machte ...

func SellBtnTapped(_ sender: UIButton) { 

    let indexPath = collectionView?.indexPath(for: ((sender.superview?.superview) as! RecipeCollectionViewCell)) 

    self.photoThumbnail = self.arrayOfURLImages[(indexPath?.row)!] 

    let myVC = storyboard?.instantiateViewController(withIdentifier: "productSellIdentifier") as! sellTableViewController 

    let productObject = productData1[(indexPath?.row)!] 

     if selectedItems == nil { 
      selectedItems = [Product(name:productObject.name, id: productObject.id)] 

     } else { 
      selectedItems?.append(productObject) 

     } 
     myVC.arrProduct = selectedItems 
     navigationController?.pushViewController(myVC, animated: true) } 

Aber mein Problem ist, ich bin nicht in der Lage, das richtige Bild zu übergeben, wie ich den Namen und die ID zu tun. In meinem Fall ist der Name & id passed, aber das Bild ist falsch übergeben. Wie kann ich es reparieren...?

EDIT: Das Parsen von json, wo sowohl das Bild und andere Daten zu dem Array hinzugefügt wird, wie so gegeben ist

 var theProduct = Product(name: name, id: id, theRate: rate, quantity: qty, sku: skuCode, prdCateg: prodCat, prodDescr: description) 
    if let images = anItem["product_images"] as? [[String:String]] { 
    for image in images { 
    guard let imageId = image["id"], 
    let url1 = image["image"], 
    let isDefault = image["is_default"] else {continue} 
    print(imageId) 
    let productImage = ProductImage(id: imageId, url: URL(string: url1)!, isDefault: isDefault == "1") 
    theProduct.add(image: productImage) //image is added here 
    self.productData1.append(theProduct) 

    let url = URL(string: url1) 
    let data = try? Data(contentsOf: url!) 
    self.arrayOfURLImages.append(UIImage(data: data!)!) 
    self.appDelegate.commonArrayForURLImages = self.arrayOfURLImages 

EDIT 2:

Dies ist, wie ich bin Zuweisen der Bilder und anderer Daten in der Tabellenansichtszelle. Dies ist der Code von cellForRow .. (des Tableview aus, wo die Zellen geladen werden ..)

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell: sellTableViewCell = tableView.dequeueReusableCell(withIdentifier: "sellProductIdentifier") as! sellTableViewCell 

cell.prdImgView?.image = self.appDelegate.commonArrayForURLImages[indexPath.row]        

    let product = arrProduct?[indexPath.row] 
     cell.produvtNameLabel.text = product?.name 
     cell.rateTextField.text = product?.theRate 

     return cell 
    } 
+0

Haben Sie versucht, mit 'indexPath.item' statt' indexPath.row', wenn sie 'self.photoThumbnail' zuweisen? Zeilen befinden sich in Tabellenansichten, Auflistungsansichten arbeiten mit Elementen, da Sie mehr als eine Zelle in einer Zeile haben können, oder Sie haben möglicherweise keine klaren Zeilen. – Losiowaty

+0

@ Losiowaty..das ist nicht das Problem ... – bws

+0

Wo haben Sie Ihre 'add (image: ProductImage)' Methode aufgerufen –

Antwort

1

Ich denke Problem ist in Bild asynchron geladen, Für Bild Herunterladen es einige Zeit dauert, ist es möglich, dass Ein falsches Bild wird nach dem Herunterladen einer Zelle zugewiesen.

Versuchen Sie, diese https://github.com/onevcat/Kingfisher

+0

Nein @ Sandy..das ist nicht das Problem ... das Bild an dem bestimmten Index wird nicht ordnungsgemäß von den Strukturen gesendet. Sobald dies erreicht ist, kann das Problem behoben werden.Aber wie das gemacht wird, bin ich mir nicht sicher ... – bws