Проблема с методами делегата UICollectionView - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь использовать UICollectionView, оно показывается в представлении, но методы делегата не вызываются.Вот как я пытаюсь это сделать:

На раскадровке у меня есть UITableViewController, который имеет TableView и UIView вот так:

enter image description here

Я создал розетку для 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и появляется в представлении, как мы видим на голубом поле здесь:

enter image description here

Но методы делегата numberOfItemsInSection и cellForItemAt не являютсябудучи призваннымИ я зарегистрировал BannerViewController как источник данных и делегат UICollectionView, поэтому я не знаю, почему он не работает.

1 Ответ

0 голосов
/ 30 ноября 2018

Вы должны держать сильную ссылку на (сделать это как экземпляр var)

var bannerViewController:BannerViewController!

Также правильно добавить его

bannerViewController = BannerViewController()
addChildViewController(bannerViewController)
view.addSubview(bannerViewController.view)
bannerViewController.view.translatesAutoresizingMaskIntoConstraints =false
NSLayoutConstraint.activate([
    bannerViewController.view.leadingAnchor.constraint(equalTo: bannerView.leadingAnchor),
    bannerViewController.view.trailingAnchor.constraint(equalTo: bannerView.trailingAnchor),
    bannerViewController.view.topAnchor.constraint(equalTo: bannerView.topAnchor),
    bannerViewController.view.bottomAnchor.constraint(equalTo: bannerView.bottomAnchor)
])
bannerViewController.didMove(toParentViewController: self)

Также не забудьте

extension BannerViewController: UICollectionViewDelegate {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...