扩展UICollectionView的类的初始值设定项(Swift 3.2)
我用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
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非常感谢,这才更有意义!!