swift - UICollectionView 数据源方法不会被调用

标签 swift uicollectionview datasource

我正在重构我的 ViewControllers,其中一个包含 collectionView,但现在 DataSource 不再被调用。

我的 View Controller :

class CoinPageVC: UIViewController, DependencyInjectionVC, Storyboarded {

    lazy var mainView: CoinPageV = {
        let v = CoinPageV()
        v.collectionView.delegate = self
        return v
    }()

    var coin: Coin!
    var selectedBase: String!
    var viewContainer: [UIView]!

    var collectionViewViewDataSource: CollectionViewCoinPageDatasource?


    func injectDependencys(dependency: CoinPageDependency) {
        self.coin = dependency.coin
        self.selectedBase = dependency.base
        self.viewContainer = dependency.views
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.collectionViewViewDataSource = CollectionViewCoinPageDatasource(data: viewContainer)
        self.mainView.collectionView.dataSource = self.collectionViewViewDataSource
        self.mainView.collectionView.reloadData()
    }
}
extension CoinPageVC: SetMainView {}

extension CoinPageVC: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 0
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        let width:CGFloat = collectionView.bounds.width
        let height:CGFloat = collectionView.bounds.height
        // - (tabBarHeight + menuBar.frame.height + heightNavigationBarTop)
        let output = Utility.shared.CGSizeMake(width, height)
        return output
    }

    func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
        let index = Int(targetContentOffset.pointee.x / view.frame.width)
        let indexPath = IndexPath(item: index, section: 0)
        mainView.menuBar.collectionView.selectItem(at: indexPath, animated: true, scrollPosition: .centeredHorizontally)
    }
}

我的数据源类:

class CollectionViewCoinPageDatasource: NSObject, UICollectionViewDataSource {

    let data: [UIView]

    init(data: [UIView]){
        self.data = data
    }


    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 3
        return data.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        //let outputCell: UICollectionViewCell
        let row = indexPath.item
        let outputCell = collectionView.dequeueReusableCell(withReuseIdentifier: Identifier.coinPageCollectionViewOverviewCell.rawValue, for:indexPath) as! CollectionViewCellView
        outputCell.view = data[row]
        return outputCell
    }
}

我的收藏 View 设置:

lazy var  collectionView: UICollectionView = {

    let layout = UICollectionViewFlowLayout()
    let frame = CGRect(x: 0, y: 0, width: 0, height: 0)
    let cv = UICollectionView(frame: frame, collectionViewLayout: layout)
    cv.register(CollectionViewCellView.self, forCellWithReuseIdentifier: Identifier.coinPageCollectionViewOverviewCell.rawValue)
    if let flowLayout = cv.collectionViewLayout as? UICollectionViewFlowLayout {
        flowLayout.scrollDirection = .horizontal
        flowLayout.minimumLineSpacing = 0
    }
    cv.backgroundColor = .green
    cv.isPagingEnabled = true
    //cv.backgroundColor = .blue

    return cv
}()

我错过了什么? 我设置了数据源并将其连接到 collectionView 的数据源,但这些方法没有被调用。

最佳答案

lazy var  collectionView: UICollectionView = {

    let layout = UICollectionViewFlowLayout()
    let frame = CGRect(x: 0, y: 0, width: 0, height: 0)
    let cv = UICollectionView(frame: frame, collectionViewLayout: layout)
    cv.register(CollectionViewCellView.self, forCellWithReuseIdentifier: Identifier.coinPageCollectionViewOverviewCell.rawValue)
    if let flowLayout = cv.collectionViewLayout as? UICollectionViewFlowLayout {
        flowLayout.scrollDirection = .horizontal
        flowLayout.minimumLineSpacing = 0
    }
    cv.backgroundColor = .green
    cv.isPagingEnabled = true
    //cv.backgroundColor = .blue



    cv.delegate = self
    return cv
}()

关于swift - UICollectionView 数据源方法不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53536263/

相关文章:

swift - 使 iAd 正确地提交到 AppStore

ios - UICollectionViewController 未从 NIB 有效加载

ios - 奇怪的行为设置 tableView 行高和滚动位置 Swift

spring - PGD​​atasource 不会连接到远程服务器

java - C3P0 ComboPooledDataSource.getConnection 方法在部署后带空

ios - 如何在 Swift 4 中使用 Core Data 保存数据而不写入两次值?

swift - 如何在 Swift 中更新字典值

swift - UILabel 文本填充框架宽度

ios - 滚动到启用分页的 UICollectionView 中的页面

datasource - 如何使用 HikariDataSource 在 logBack 中配置 DBappender 的池大小?