'必需的'初始化'init(coder :)'必须由'UITableViewCell'`的子类提供
据说这个代码在这里和这里工作 ,但我似乎无法使其工作。
IBOutlets连接到故事板中的对象。 prototypeCell被命名,所以我可以使用它与dequeueReusableCellWithIdentifier
和它的自定义类属性设置为commentCell
。
第一个错误(我可以解决,但上面的链接都不需要它,这让我觉得我做错了什么,对吗?):
Overriding method with selector 'initWithStyle:reuseIdentifier:' has incompatible type '(UITableViewCellStyle, String) -> commentCell'
第二个错误(有趣的错误):
'required' initializer 'init(coder:)' must be provided by subclass of 'UITableViewCell'`
单元分类代码:
class commentCell: UITableViewCell { @IBOutlet weak var authorLabel: UILabel! @IBOutlet weak var commentLabel: UITextView! init(style: UITableViewCellStyle, reuseIdentifier: String) { super.init(style: style, reuseIdentifier: reuseIdentifier) } override func awakeFromNib() { super.awakeFromNib() } override func setSelected(selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) } }
初始化代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { println(comments[indexPath.row]) var cell = self.tableView.dequeueReusableCellWithIdentifier("prototypeCell") as commentCell cell.commentLabel.text = comments[indexPath.row]["comment"] as NSString cell.authorLabel.text = comments[indexPath.row]["fromid"] as NSString return cell }
第一个初始化程序的正确签名是这样的:
init(style style: UITableViewCellStyle, reuseIdentifier reuseIdentifier: String?)
请注意, reuseIdentifier
是一个可Optional
,如?
。
如果您重写某个类的指定初始值设定项,则不会inheritance其他指定的初始值设定项。 但是UIView
采用NSCoding
协议,它需要一个init(coder:)
初始化器。 所以你也必须实现那个:
init(coder decoder: NSCoder) { super.init(coder: decoder) }
但是,请注意,除了调用超级函数之外,您实际上并没有在任何初始化程序中做任何事情,所以您不需要实现任一初始化程序! 如果你不覆盖任何指定的初始值设定项,你将inheritance你所有的超类的指定初始值设定项。
所以我的build议是,你只是删除你的init(style:reuseIdentifier:)
初始化器,除非你要添加一些初始化。
如果您打算为其添加一些初始化,请注意,故事板中的原型单元格不是由init(style:reuseIdentifier:)
初始化的。 它们由init(coder:)
初始化。
不知道为什么你需要一个自定义的UITableViewCell类,如果你正在使用原型单元格的故事板。 您可以将标签和文字查看放入单元格中,然后使用它们。
如果你是从xib工作,然后我得到它,但你只需要:
class commentCell: UITableViewCell { @IBOutlet weak var authorLabel: UILabel! @IBOutlet weak var commentLabel: UITextView! }
然后你将在TableView类中注册xib:
override func viewDidLoad() { super.viewDidLoad() self.tableView.registerNib(UINib(nibName: "commentCell", bundle: nil), forCellReuseIdentifier: "reuseIdentifier") }
关于cellForRowAtIndexPath函数,现在语法稍加修改:
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { var cell = self.tableView.dequeueReusableCellWithIdentifier("prototypeCell") as commentCell return cell }
如果你想发布到github,我们可以帮助修改。 没有看到更多的代码就很难具体。