Итак, у меня есть 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
}
}
}
Вот как выглядит моя раскадровка:
Вот как выглядит мой симулятор когда я его запускаю:
ОБНОВЛЕНИЕ: Вот как мой код выглядит для моего подкласса 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()
}
}