2016-07-05 9 views
0

ich auf ButtonRows mit einem Bild arbeite, die asynchron heruntergeladen wird, hier ist mein Code:Bild wird nicht angezeigt, bis die Zeile geklickt wird/gestampft

futurSection <<< ButtonRow("aaa") { 
      $0.title = "" 
      }.cellUpdate { cell, row in 
       cell.imageView?.imageFromServerURL("http://example.com/0x0ss2.jpg") 
       row.reload() 
      }.cellSetup({ (cell, row) ->() in 
       row.cell.height = { 
        return 150 
       } 
      }) 

ich eine Erweiterung für die UIImageView verwendet:

extension UIImageView { 
    public func imageFromServerURL(urlString: String) { 

     NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: urlString)!, completionHandler: { (data, response, error) -> Void in 

      if error != nil { 
       print(error) 
       return 
      } 
      dispatch_async(dispatch_get_main_queue(), {() -> Void in 
       let image = UIImage(data: data!) 
       self.image = image 
       self.layoutSubviews() 
       if let myViewController = self.parentViewController as? ShowDetails { 
        myViewController.form.rowByTag("aaa")?.updateCell() 
       } 

      }) 

     }).resume() 
    }} 

Aber das Bild in der Zeile wird nicht sichtbar, bis ich auf die Zeile selbst klicke. Ich habe sogar updateCell aufgerufen und neu geladen, aber id funktioniert nicht.

Vielen Dank!

+0

Was tun raw.reload()? – CZ54

+0

Haben Sie versucht, ein lokales Bild zu erstellen, hat das funktioniert? Möglicherweise sind die Zellen geladen, bevor sie die Antwort vom Server erhalten haben. Aktualisieren Sie die Zelle nach der Antwort vom Server? –

+0

@bobby Ich habe nur versucht, wenn es da wäre. –

Antwort

0

Versuchen Sie dies, ersetzen Sie den Code in Ihre Erweiterung für dieses

extension UIImageView { 


    public func imageFromServerURL(urlString: String,closure:((loaded : Bool) -> Void)?) { 

     NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: urlString)!, completionHandler: { (data, response, error) -> Void in 

      if error != nil { 
       print(error) 
       return 
      } 
      dispatch_async(dispatch_get_main_queue(), {() -> Void in 
       let image = UIImage(data: data!) 
       self.image = image 
       if(closure != nil) 
       { 
        closure!(loaded: true) 
       } 
      }) 

     }).resume() 
    } 

} 

und dann diesen Code verwenden, um die Zelle

<<< ButtonRow("aaa") { 
       $0.title = "" 
       }.cellUpdate { cell, row in 
        cell.imageView?.imageFromServerURL("http://example.com/0x0ss2.jpg", closure: { (loaded) in 
         row.reload() 
        }) 
       }.cellSetup({ (cell, row) ->() in 
        row.cell.height = { 
         return 150 
        } 
       }) 

Ich hoffe, das hilft zu laden, sieht