Загрузить изображение в TableView [Swift] - PullRequest
0 голосов
/ 13 октября 2018

У меня есть проект swift со следующими файлами:

- ViewController.swift, который в основном содержит tableView и в который загружаются данные из Firebase

- ViewControllerTableViewCell.swift, который содержит выходы для tableView

- DataModel.swift, который содержит модель для данных Firebase

В таблице Iвключили некоторые метки, которые заполнены данными из Firebase, рядом с imageView.URL-адрес изображения получен в файле ViewController.swift как authorAvatarUrl рядом с другими строками из Firebase.После этого процесса данные добавляются в список (self.dataList.append(downloadeddata)) и таблица перезагружается:

self.tableViewData.reloadData()

Как загрузить изображение и отобразить его в imageView (который находится внутри ячейки таблицы)?

Я пытался

// Declare variable
var cellViewController = ViewControllerTableViewCell()

[...]

// Download author's avatar
let avatarURL = URL(string: authorAvatarUrl as! String)
                Alamofire.request(avatarURL!).responseData { (response) in

                    if response.error == nil {

                        if let data = response.data {

                            self.cellViewController.profileImageView.image = UIImage(data: data)

                        }

                    }

                }

внутри ViewController.swift -файла, однако это не работает.

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Если я правильно понимаю, проблема с вашим кодом может заключаться в том, что вы ссылаетесь не на TableViewCell, который в данный момент отображается в TableView, а на отдельную ячейку, которую вы объявили в ViewController, но никогда не представляли.

Вы должны переместить код для выполнения сетевого запроса в классе ViewControllerTableViewCell или в методе tableView(_:cellForRowAt:) и указать ссылку на данную ячейку.

Как указывали другие,Есть много библиотек, которые могут помочь вам с загрузкой данных изображения и установкой UIImageView;поскольку вы уже используете Alamofire, вы можете использовать AlamofireImage .

. Тогда самым простым способом загрузки изображений будет включение этого кода в ViewController

var allAvatarURLs: [URL] = // the array containing all the avatars' url

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let row = indexPath.row
    let url = allAvatarURLs[row]
    let cell = tableView.dequeueReusableCell(withIdentifier: "<yourIdentifier>", for: indexPath) as! ViewControllerTableViewCell
    cell.profileImageView.image.af_setImage(withURL: url) // UIImageView extension in AlamofireImage
    return cell
}

Где allAvatarURLs содержит URL всех изображений.

0 голосов
/ 13 октября 2018

Используйте библиотеку вроде Зимородок

Тогда вы просто используете:

let url = URL(string: "url_of_your_image")
imageView.kf.setImage(with: url)
...