Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to fetch image and pdf file from json and display in tableviewcell swift 3

Hello all as i am a Fresher so dont know how to fetch image and pdf file from API and how to display in tableviewcell so that user can see the image and pdf file as well download it from there.I tried some code for image but its not working and dont have a single idea for pdf.Please help.

code for image : I have declared an array of images like below :

var announimage : Array = [UIImage]()

Below is the format of my JSON data.

{
 "Download_Details": [
 {
"school_id": 1,
"class_id": "Pre - KG ",
"section": "A ",
"file_name": "427a3be0155b49db999cffb51f078f9c_431875732.pdf",
"title": "TeQ",
"message": "Hello Users",
"date": null
},
{
"school_id": 1,
"class_id": "Pre - KG ",
"section": "A ",
"file_name": "dce5ab53f45f4ec5b52894bc6286ed35_1376021.jpg",
"title": "Welcome",
"message": "Welcomes you.",
"date": null
},
{
 "school_id": 1,
 "class_id": "Pre - KG ",
 "section": "A ",
 "file_name": "9d3ff19bd54e48a087947227ee36c68c_13417773.png",
 "title": "TEST",
"message": "TEST",
"date": null
}
],
}

Below is the code i have tried :

let responseString = try! JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary

let downarray = responseString?.value(forKey: "Download_Details") as? NSArray

for down in downarray!
{
    let dowdict = down as? NSDictionary

    let dmsgname = dowdict?.value(forKey: "message")

    self.announmessage.append(dmsgname as! String)

   let downimage = dowdict?.value(forKey: "file_name")

   self.announimage.append(downimage as! UIImage)


}

DispatchQueue.main.async                                    
{
    self.annountable.reloadData()
}

UITableView DataSource :

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell2 = tableView.dequeueReusableCell(withIdentifier: "cell1", for: indexPath) as! AnnounceCellTableViewCell
    cell2.announlabel.text = announmessage[indexPath.row]
    cell2.announdate.text = announcedates[indexPath.row]
    let image :UIImage = UIImage(data:announimage[indexPath.row] as! Data)!
    cell2.dataimage.image = image       
     return cell2

}    
like image 256
deltami Avatar asked Dec 04 '17 08:12

deltami


2 Answers

    let imgUrlStr:String = "https://dncache-mauganscorp.netdna-ssl.com/thumbseg/378/378006-bigthumbnail.jpg";

    if let imgURL = URL.init(string: imgUrlStr) {
        do {
            let imageData = try Data(contentsOf: imgURL as URL);
            let image = UIImage(data:imageData);
            print("here you will find your image:- \(String(describing: image)) ");
        } catch {
            print("Unable to load data: \(error)")
        }
    }

Output:--

here you will find your image:- Optional(<UIImage: 0x6080000bca40>, {450, 338})

In your case get your full url by using following piece of code

    var prefixUrl = "http://apidomain.com/";
    let imageUrlStr = dowdict?.value(forKey: "file_name")

    prefixUrl.append(imageUrlStr);

    print("full url \(prefixUrl)");

FOR PDF -- as pdf does not display in image view, so you need to display it in webView. Just load request in webView for pdf.

    let webView = UIWebView.init();
    let pdfUrlStr:String = "http://www.pdf995.com/samples/pdf.pdf";
    let pdfUrl = URL.init(string: pdfUrlStr);
    let urlRequest = URLRequest.init(url: pdfUrl!, cachePolicy: URLRequest.CachePolicy.reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 30.0);
    webView.loadRequest(urlRequest);
like image 104
Prince Kumar Sharma Avatar answered Sep 28 '22 20:09

Prince Kumar Sharma


Try below code on cell for row

let image : UIImage = UIImage(data: filteredAry[indexPath.row] as! Data)

cell2.dataimage.image = image
like image 22
Bucket Avatar answered Sep 28 '22 19:09

Bucket