首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类扩展UICollectionView的初始化器(SWIFT3.2)

类扩展UICollectionView的初始化器(SWIFT3.2)
EN

Stack Overflow用户
提问于 2018-01-12 02:51:48
回答 2查看 468关注 0票数 2

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

但是,当我试图在自定义初始化器中调用super.init()时,我会收到一条错误消息,上面写着‘必须调用超类UICollectionView的指定初始化程序’。我尝试过实现super.init(frame:CGRect),但这似乎也不起作用。

下面是我的EventCollectionView类的第一部分。

代码语言:javascript
复制
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

任何洞察力都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-12 03:10:58

因此,如果您想通过情节提要初始化这样的EventCollectionView,您应该以另一种方式注入这些参数,如下所示:

代码语言:javascript
复制
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,例如:

代码语言:javascript
复制
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)
  }
}
票数 0
EN

Stack Overflow用户

发布于 2018-01-12 03:07:51

Apple developer文档来看,适当的init方法签名应该是:init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout)。例如,您的init方法可能变成:

代码语言:javascript
复制
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)  
    ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48218878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档