据报道,这段代码在这里和这里都有效,但是我似乎无法使其正常工作。
IBOutlet已连接到情节提要中的对象。命名了prototypeCell,因此我可以将其使用,dequeueReusableCellWithIdentifier并将其自定义类属性设置为commentCell。
dequeueReusableCellWithIdentifier
commentCell
First Error(我可以解决,但上面的链接都不需要它,这使我觉得我做错了。对吗?):
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,如所示?。
reuseIdentifier
Optional
?
如果您重写了类的任何指定的初始值设定项,则不会继承任何其他指定的初始值设定项。但是UIView采用该NSCoding协议,这需要一个init(coder:)初始化程序。因此,您也必须实现这一点:
UIView
NSCoding
init(coder:)
init(coder decoder: NSCoder) { super.init(coder: decoder) }
但是请注意,除了调用super之外,您实际上都没有在任何一个初始化器中执行任何操作,因此您无需实现任何一个初始化器!如果您不重写任何指定的初始值设定项,则您将继承超类的所有指定的初始值设定项。
因此,我的建议是,init(style:reuseIdentifier:)除非您要向其中添加一些初始化,否则请完全删除它。
init(style:reuseIdentifier:)
而且,如果您打算对其进行一些初始化,请注意,情节提要中的原型单元 不要 由初始化init(style:reuseIdentifier:)。它们由初始化init(coder:)。