Загрузить изображение в TableViewCell - PullRequest
0 голосов
/ 27 июня 2019

Я хочу загрузить изображение из URL-адреса в productimage, но мой код не работает.
Как я могу загрузить изображения в tableViewCells?

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

    let cell = self.tableView.dequeueReusableCell(withIdentifier: "cellWomanSaved") as! WomanSavedTableViewCell

    let Data: DataModel

    Data = DataList[indexPath.row]

    cell.priceLabel.text = Data.Price
    cell.productLabel.text = Data.ImageURL
    cell.productImage.image = UIImage(data: url)

    if let url = URL(string: productLabel[indexPath.row]) {

        do {

            let data = try Data(contentsOf: url)
            self.swipeImage.image = UIImage(data: data)

        }catch let error {

            print(" Error : \(error.localizedDescription)")

        }
    }

    return cell
}

Ответы [ 3 ]

0 голосов
/ 27 июня 2019

Вы можете использовать библиотеку SDWebImage , чтобы легко загрузить изображение из URL и показать его в imageView.SDWebImage очень удобен, поскольку он загружает и кэширует изображение, и в следующий раз, когда вам нужно изображение с того же URL-адреса, он загружает его из кэша.

Это действительно просто в использовании.Вы можете добавить это в свой проект через cocoapod, carthage или вручную код библиотеки для вашего проекта.

Вот ссылка на репозиторий github:

https://github.com/SDWebImage/SDWebImage

0 голосов
/ 28 июня 2019
  • Создание задачи с данными в вашей ячейке
  • Отмена задачи с данными в функции prepareForReuse
  • Передача вашего URL-адреса в ячейку в функции контроллера CellForRowAt
  • Такзаполните вашу ячейку моделью и задайте значения для свойств

    class MyCell: UITableViewCell {
    
        // MARK: - Outlets
    
        @IBOutlet weak var priceLabel: UILabel!
        @IBOutlet weak var productLabel: UILabel!
        @IBOutlet weak var productImage: UIImageView!
    
    
        /// create dataTask for cancel in prepareForReuse function
        private var dataTask: URLSessionDataTask?
    
        /// Like this
        override public func prepareForReuse() {
           super.prepareForReuse()
            dataTask?.cancel()
        }
    
        func populate(with model: YourModel) {
            priceLabel.text = model.Price
            productLabel.text = model.ImageUrl
    
            /// You should set url in indexPath of your logo array([ImageUrl])
            let url = model.ImageUrl /// It's sample url for explain this is an url of your current index model
            if let imageUrl = url {
                downloaded(from: imageUrl)
            }
        }
    
        func downloaded(from url: URL, contentMode mode: UIView.ContentMode = .scaleAspectFit) {
            contentMode = mode
            dataTask = URLSession.shared.dataTask(with: url) { data, response, error in
                guard
                    let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
                    let mimeType = response?.mimeType, mimeType.hasPrefix("image"),
                    let data = data, error == nil,
                    let image = UIImage(data: data)
                    else { return }
                DispatchQueue.main.async() {
                    self.productImage.image = image
                }
            }
            dataTask?.resume()
        }
    }
    

В функции tableView вашего контроллера на контроллере cellForRowAt:

let model: DataModel = DataList[indexPath.row]
cell.populate(with: model)

return cell
0 голосов
/ 27 июня 2019

Изменить эту строку

if let url = URL(string: productLabel[indexPath.row]) {

К

   if let url = URL(string: productLabel[indexPath.row].addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...