Инициализаторы класса, расширяющего 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)  
    ...
}
Другие вопросы по тегам