Вид Swift Uicollection внутри таблицы Вид - PullRequest
0 голосов
/ 09 февраля 2019

Я получил массив URL изображений внутри массива объектов записей. Я хочу отобразить этот массив записей в табличном представлении и отобразить изображения в виде набора в табличном представлении.Как я могу ввести описание изображения здесь сделать это?Я устал использовать int i в качестве индикатора, но он не работает.

вот коды

 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "HomeCell", for: indexPath) as! HomeTableViewCell
    cell.postsText.text = postLists[indexPath.row].postText
    i = indexPath.row
    return cell
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return (postLists[i].imageUrlList?.count)!
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ImageCell", for: indexPath) as! PhotosCollectionCell
        let url =  postLists[i].imageUrlList![indexPath.row]
            let imgUrl = URL(string: url)
            URLSession.shared.dataTask(with: imgUrl!, completionHandler: { (data, response, error) in
                if error != nil {
                    // if download hits an error, so lets return out
                    print(error)
                    return
                }
                // if there is no error happens...
                DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { // in half a second...
                    cell.postPhoto.image = UIImage(data: data!)
                }
            }).resume()
    return cell
}

1 Ответ

0 голосов
/ 09 февраля 2019

Никогда не насильственно оборачивайте опционально, пока вы не будете уверены.(Я могу также комментировать, но я хочу добавить больше деталей, которые не подходят для комментариев, так что простите)

Еще одна вещь, которую я вижу, это использовать indexPath.item в collectionView не indexPath.row оба будут одинаковыми, ноэто стандарт, которому я всегда следую.

Вы не вызываете задачу URLSession.data в фоновом потоке.всегда рекомендую это делать.Я предлагаю вам использовать стороннюю библиотеку, такую ​​как SDWebIamge , которая поможет вам кэшировать уже загруженный образ.

Wy Crash :

Я вижу Crash из-за вашей переменной i в вашем коде postLists[i].

ЧтоВы должны сделать

Внутри

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

Вы можете установить тег для представления своей коллекции как

cell.yourCollectionViewObject.tag = indexPath.row

и заменить

    let url =  postLists[i].imageUrlList![indexPath.row]

с

    let url =  postLists[collectionView.tag].imageUrlList![indexPath.row]

Надеюсь, это полезно

...