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

4
尝试初始化一个集合视图类时,出现以下错误:

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

数据从另一个视图控制器传递,我希望在用户搜索时从视图控制器中绘制出框架。
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 属性了。 - vadian
1个回答

6
你需要调用 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'”。 - Marlhex
为什么这只适用于UICollectionViewController? - Marlhex
为什么UICollectionView没有collectionView? - Marlhex
由于UICollectionView没有collectionView属性,所以你需要创建一个对象来继承UICollectionViewMyCollectionView - Nirav D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接