我用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任何洞察力都将不胜感激。
发布于 2018-01-12 03:10:58
因此,如果您想通过情节提要初始化这样的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
}
}然后,您应该在初始化之后的任何时候调用setup,例如:
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)
}
}发布于 2018-01-12 03:07:51
从Apple developer文档来看,适当的init方法签名应该是:init(frame: CGRect, collectionViewLayout layout: 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)
...
}https://stackoverflow.com/questions/48218878
复制相似问题