Sök…


Enklaste sättet

Det enklaste sättet att skapa detta är att använda Alamofire och dess UIImageViewExtension . Vad vi behöver är en tabellvy med en cell som har en imageView i och låter imageView kalla den imageView .

I funktionen cellForRowAt: i tabellenView laddade vi ned bilden och ställdes på följande sätt:

let url = URL(string: "https://httpbin.org/image/png")!
let placeholderImage = UIImage(named: "placeholder")!

imageView.af_setImage(withURL: url, placeholderImage: placeholderImage)

URL-adressen ska peka på den bild du vill ladda ner och placeHolder-bilden ska vara en lagrad bild. Vi kallar af_setImage metoden af_setImageimageView som laddar ner bilden på den angivna url och under nedladdningen visas platshållarbilden. Så snart bilden laddas ner visas den begärda bilden

Kontrollera att cellen fortfarande är synlig efter nedladdningen

Ibland tar nedladdningen längre tid än cellen visas. I det här fallet kan det hända att den nedladdade bilden visas i fel cell. För att fixa detta kan vi inte använda UIImageView-förlängningen .

Vi kommer fortfarande att använda Alamofire men vi kommer att använda färdigbehandlaren för att visa bilden.

I det här scenariot behöver vi fortfarande en tabellvisning med en cell som har en bildvisning i den. I metoden cellForRowAt: skulle vi ladda ner bilden med följande kod:

let placeholderImage = UIImage(named: "placeholder")!
imageView.image = placeholderImage

let url = URL(string: "https://httpbin.org/image/png")!

Alamofire.request(url!, method: .get).responseImage { response in
    guard let image = response.result.value else { return }

    if let updateCell = tableView.cellForRow(at: indexPath) {
        updateCell.imageView.image = image
    }
}

I det här exemplet ställer vi först in bilden till platshållarbilden. Efteråt vi hämta bilden med request metoden Alamofire . Vi passerar url som det första argumentet och eftersom vi bara vill få bilden kommer vi att använda .get HTTP-metoden. Eftersom vi laddar ner en bild vill vi att svaret ska vara en bild, därför använder .responseImage metoden .responseImage .

När bilden har laddats ner stängs avslutningen och vi ser först och främst till att den nedladdade bilden faktiskt finns. Då ser vi till att cellen fortfarande är synlig genom att kontrollera att cellForRow (på: indexPath) inte returnerar noll. Om det inte händer ingenting, om det inte tilldelar vi den nyligen nedladdade bilden.

Detta sista if-uttalande säkerställer att cellen fortfarande är synlig om användaren redan rullat över cellen kommer updateCell att vara noll och if-uttalandet returnerar noll. Detta hjälper oss att förhindra visning av fel bild i en cell.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow