Я пытаюсь использовать UICollectionView
, оно показывается в представлении, но методы делегата не вызываются.Вот как я пытаюсь это сделать:
На раскадровке у меня есть UITableViewController
, который имеет TableView
и UIView
вот так:
Я создал розетку для UIView
в своем классе UITableViewController
:
class FeedTableViewController: UITableViewController {
@IBOutlet weak var bannerView: UIView!
}
И в функции viewDidLoad()
я создаю экземпляр UIViewController
класс, который будет делегатом и источником данных моего UICollectionView
:
override func viewDidLoad() {
let bannerViewController = BannerViewController()
bannerView.addSubview(bannerViewController.view)
bannerViewController.view.translatesAutoresizingMaskIntoConstraints = false
bannerViewController.view.leadingAnchor.constraint(equalTo: bannerView.leadingAnchor).isActive = true
bannerViewController.view.trailingAnchor.constraint(equalTo: bannerView.trailingAnchor).isActive = true
bannerViewController.view.topAnchor.constraint(equalTo: bannerView.topAnchor).isActive = true
bannerViewController.view.bottomAnchor.constraint(equalTo: bannerView.bottomAnchor).isActive = true
}
Вот полный код BannerViewController
класса:
class BannerViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let frame = CGRect(x: 0, y: 0, width: view.frame.size.width, height: 125)
let collectionView = UICollectionView(frame: frame, collectionViewLayout: UICollectionViewFlowLayout())
collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "collectionCell")
collectionView.delegate = self
collectionView.dataSource = self
collectionView.backgroundColor = .cyan
view.addSubview(collectionView)
}
}
extension BannerViewController: UICollectionViewDataSource {
// MARK: UICollectionViewDataSource
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 3
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell", for: indexPath)
cell.backgroundColor = .red
return cell
}
}
extension BannerViewController: UICollectionViewDelegateFlowLayout {
// MARK: UICollectionViewDelegateFlowLayout
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: collectionView.bounds.size.width, height: collectionView.bounds.size.height)
}
}
Создается экземпляр UICollectionView
и появляется в представлении, как мы видим на голубом поле здесь:
Но методы делегата numberOfItemsInSection
и cellForItemAt
не являютсябудучи призваннымИ я зарегистрировал BannerViewController
как источник данных и делегат UICollectionView
, поэтому я не знаю, почему он не работает.