扩展UICollectionView的类的初始值设定项(Swift 3.2)

扩展UICollectionView的类的初始值设定项(Swift 3.2),swift,collectionview,initializer,Swift,Collectionview,Initializer,我用Swift 3.2编码。我有一个名为EventCollectionView的类,它扩展了UICollectionView。这个类的一个实例是一个“事件”,我想用三个UIImages初始化它,这些图像显示事件照片、事件信息和事件票证 但是,当我尝试在自定义初始值设定项中调用super.init()时,我收到一条错误消息,说“必须调用超类UICollectionView的指定初始值设定项”。我尝试实现super.init(frame:CGRect),但这似乎也不起作用 下面是我的EventCol

我用Swift 3.2编码。我有一个名为
EventCollectionView
的类,它扩展了
UICollectionView
。这个类的一个实例是一个“事件”,我想用三个UIImages初始化它,这些图像显示事件照片、事件信息和事件票证

但是,当我尝试在自定义初始值设定项中调用
super.init()
时,我收到一条错误消息,说“必须调用超类UICollectionView的指定初始值设定项”。我尝试实现
super.init(frame:CGRect)
,但这似乎也不起作用

下面是我的
EventCollectionView
课程的第一部分

var eventPhoto: UIImage?
var eventInfo: UIImage?
var eventTickets: UIImage?

//Initializers
required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

init?(eventPhoto: UIImage?, eventInfo: UIImage?, eventTickets: UIImage?) {
    super.init()       //Where the error occurs
    self.eventPhoto = eventPhoto
    self.eventInfo = eventInfo
    self.eventTickets = eventTickets
任何洞察都将不胜感激。

从中,看起来合适的
init
方法签名应该是:
init(frame:CGRect,collectionViewLayout:UICollectionViewLayout)
。例如,您的
init
方法可能会变成:

init?(eventPhoto: UIImage?, eventInfo: UIImage?, eventTickets: UIImage?) {

    let flowLayout:UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    let collectionViewFrame:CGRect = CGRect(x: 0, y: 0, width: 200, height: 200)

    super.init(frame: collectionViewFrame, collectionViewLayout: flowLayout)  
    ...
}

因此,如果您想通过故事板初始化此类
EventCollectionView
,则应以另一种方式注入这些参数,如:

class EventCollectionView:UICollectionView {
  var eventPhoto: UIImage?
  var eventInfo: UIImage?
  var eventTickets: UIImage?

  func setup(eventPhoto: UIImage?, eventInfo: UIImage?, eventTickets: UIImage?) {
    self.eventPhoto = eventPhoto
    self.eventInfo = eventInfo
    self.eventTickets = eventTickets
  }
}
然后,您应该在初始化后随时调用
设置
,例如:

import UIKit

class YourViewController: UIViewController {
  @IBOutlet var collectionView:EventCollectionView!

  override func viewDidLoad() {
    super.viewDidLoad()

    // setup whatever here:
    let photo:UIImage? = nil
    let info:UIImage? = nil
    let tickets:UIImage? = nil
    collectionView.setup(eventPhoto: photo, eventInfo: info, eventTickets: tickets)
  }
}

您是要以编程方式还是通过故事板/xib初始化
EventCollectionView
呢?@anderamugnanii by storyboard非常感谢,这才更有意义!!