Инициализаторы класса, расширяющего UICollectionView (Swift 3.2)
Я кодирую в 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
Любое понимание будет с благодарностью.
2 ответа
Так что если вы хотите инициализировать такой 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)
}
}
Из документов разработчика Apple, это выглядит как 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)
...
}