【问题标题】:Must call a designated initializer of the superclass 'UICollectionView'必须调用超类“UICollectionView”的指定初始化程序
【发布时间】:2017-02-02 10:20:46
【问题描述】:

尝试初始化一个collection view类并得到以下错误:

必须调用超类'UICollectionView'的指定初始化器

数据正在从另一个 ViewController 传递,我希望在用户搜索时从 ViewController 中绘制框架。

class searchLocationsCollectionViewManager: UICollectionView, UICollectionViewDataSource, UICollectionViewDelegate {

weak var collectionView: UICollectionView! {
    didSet {
        collectionView.dataSource = self
        collectionView.delegate = self
    }
}

// Data handler
var data: [[String:Any]]? {
    didSet {
        print(data!)
        //collectionView.reloadData()
    }
}

init(collectionView: UICollectionView, frame: CGRect) {
    self.collectionView = collectionView
    super.init()
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!
}



func numberOfSections(in collectionView: UICollectionView) -> Int {
    return 1
}

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

// This is the current method for returning the cell.
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {




    return UICollectionViewCell()

}

关于为什么会发生上述情况的任何想法?

【问题讨论】:

  • UICollectionView 子类中的 UICollectionView 属性的用途是什么?考虑分配初始值时未调用didSet。如果您的意思是UICollectionViewController,那么已经有一个UICollectionView 属性。

标签: ios swift3 uicollectionview


【解决方案1】:

你需要调用UICollectionView的指定初始化器init(frame:collectionViewLayout:)

init(collectionView: UICollectionView, frame: CGRect) {        
    self.collectionView = collectionView
    //Setup collectionView layout here and pass with init 
    let layout = UICollectionViewLayout()
    super.init(frame: frame, collectionViewLayout: layout)
}

【讨论】:

  • 我的类是从 UICollectionView 扩展的,它没有 collectionView 属性说:'MyCollectionView' 类型的值没有成员'collectionView'
  • 为什么这只适用于 UICollectionViewController?
  • 为什么UICollectionView没有collectionView
  • @Daniella 因为UICollectionView 没有collectionView 属性,您需要创建扩展UICollectionViewMyCollectionView 的对象。
猜你喜欢
  • 2016-03-11
  • 2016-05-10
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 2014-09-29
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多