TableView с ячейками-прототипами, которые содержат коллекцию, не возвращающую все ячейки таблицы - PullRequest
0 голосов
/ 15 февраля 2020

Итак, у меня есть TableViewController, у которого есть таблица с 4 ячейками прототипа. В каждой ячейке-прототипе есть вид коллекции, а у этого вида коллекции - вид коллекции. Я пытаюсь заставить табличное представление отображать отдельные ячейки табличного представления с коллекционным представлением в них, но пока в моем коде он возвращает только первую ячейку табличного представления, а не остальные. Я впервые пытаюсь использовать коллекционное представление внутри табличного представления, поэтому я уверен, что это что-то маленькое, что я делаю неправильно. Вот мой код:

import UIKit

class AlbumSongArtistTableViewController: UITableViewController, UICollectionViewDelegate, UICollectionViewDataSource {

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
         if section == 0 {
                   return 1
               } else if section == 1 {
                   return 1
               } else if section == 2 {
                   return 1
               } else {
               return 1
            }
        }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if indexPath.section == 0 {
            let cell = tableView.dequeueReusableCell(withIdentifier: "GenresTableViewCell", for: indexPath) as! GenresTableViewCell


            return cell
        } else if indexPath.section == 1 {

            let cell = tableView.dequeueReusableCell(withIdentifier: "FeaturedArtistsCollectionViewTableViewCell", for: indexPath) as! FeaturedArtistsCollectionViewTableViewCell

            return cell
        } else if indexPath.section == 2 {

            let cell = tableView.dequeueReusableCell(withIdentifier: "NewReleasesCollectionViewTableViewCell", for: indexPath) as! NewReleasesCollectionViewTableViewCell

            return cell
        } else {

            let cell = tableView.dequeueReusableCell(withIdentifier: "SomthingElseCollectionViewTableViewCell", for: indexPath) as! SomthingElseCollectionViewTableViewCell

            return cell
        }
    }

    //MARK:- collection view delegate

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        if section == 0 {
                          return 10
                      } else if section == 1 {
                          return 8
                      } else if section == 2 {
                          return 6
                      } else {
                      return 4
                   }
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        if indexPath.section == 0{

            let cell:GenresInsideTableViewCellCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "GenresInsideTableViewCellCollectionViewCell", for: indexPath) as! GenresInsideTableViewCellCollectionViewCell

            return cell
        } else if indexPath.section == 1 {

        let cell:FeaturedArtistsInsideTableViewCellCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "FeaturedArtistsInsideTableViewCellCollectionViewCell", for: indexPath) as! FeaturedArtistsInsideTableViewCellCollectionViewCell

        return cell
        } else if indexPath.section == 2 {
            let cell:NewReleasesInsideTableViewCellCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "NewReleasesInsideTableViewCellCollectionViewCell", for: indexPath) as! NewReleasesInsideTableViewCellCollectionViewCell

            return cell
        } else {
            let cell:SomethingElseInsideTableViewCellCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "SomethingElseInsideTableViewCellCollectionViewCell", for: indexPath) as! SomethingElseInsideTableViewCellCollectionViewCell

            return cell
        }
    }
}

Вот как выглядит моя раскадровка:

StoryBoard

Вот как выглядит мой симулятор когда я его запускаю:

enter image description here

ОБНОВЛЕНИЕ: Вот как мой код выглядит для моего подкласса tableviewcell:

import UIKit

class FeaturedArtistsCollectionViewTableViewCell: UITableViewCell {

    @IBOutlet weak var faCollectionView: UICollectionView!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

extension FeaturedArtistsCollectionViewTableViewCell {

    func setCollectionViewDataSourceDelegate
        <D: UICollectionViewDelegate & UICollectionViewDataSource>
        (_ dataSourceDelegate: D, forRow row:Int)
    {
        faCollectionView.delegate = dataSourceDelegate
        faCollectionView.dataSource = dataSourceDelegate

        faCollectionView.reloadData()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...