У меня есть UICollectionView
внутри UICollectionViewCell
и отдельный NSObject
, то есть dataSource
. Я могу установить dataSource
для внешнего UICollectionView
, но не для внутреннего.
Вот ячейка, содержащая внутренний UICollectionView
:
class FeaturedCell: UICollectionViewCell, UICollectionViewDelegate {
@IBOutlet var collectionView: UICollectionView!
let data = FeaturedData()
override init(frame: CGRect) {
super.init(frame: frame)
//setUp()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
func setUp() {
collectionView.dataSource = data
collectionView.delegate = self
collectionView.reloadData()
}
}
extension FeaturedCell {
func setCollectionViewDataSourceDelegate <D: FeaturedData> (_ dataSourceDelegate: D, forRow row: Int) {
collectionView.delegate = dataSourceDelegate
collectionView.dataSource = dataSourceDelegate
collectionView.reloadData()
print("Reload Data")
}
}
И UIView
, содержащий внешний UICollectionView
:
class MainView: UIView, UICollectionViewDelegate {
@IBOutlet var collectionView: UICollectionView!
let data = MainData()
override func awakeFromNib() {
setUp()
}
func setUp() {
collectionView.dataSource = data
collectionView.delegate = self
collectionView.backgroundColor = UIColor.orange
collectionView.collectionViewLayout = createLayout()
collectionView.isPagingEnabled = true
collectionView.bounces = false
collectionView.allowsSelection = true
}
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
print("WillDisplay")
guard let cell: FeaturedCell = collectionView.dequeueReusableCell(withReuseIdentifier: "FeaturedCell", for: indexPath) as? FeaturedCell else {
fatalError("Unable to dequeue FeaturedCell.")
}
cell.setCollectionViewDataSourceDelegate(featuredData, forRow: indexPath.item)
}
}
Оба эти метода вызываются, но dataSource
и delegates
никогда не устанавливаются. Я также точно следовал этому учебнику (даже с UITableView
), и он все равно не установил бы dataSource
или delegate
. Что я делаю неправильно?