如何子类自定义UITableViewCell?

时间:2016-04-01 20:10:39

标签: ios swift uitableview

我正在尝试使用3个不同的自定义UITableView创建UITableViewCell。它们都共享一些常见元素,例如UILabel,称为questionLabel

我有三种类型的细胞

  • OneTextFieldTableViewCell
  • TwoLabelTableViewCell
  • ThreeLabelTableViewCell

我希望这些单元格从FormTableViewCell继承,它们共享像上面提到的questionLabel这样的常见UI元素。

代码:

class OneTextFieldTableViewCell: FormItemTableViewCell {

    @IBOutlet weak var questionLabel: UILabel!
    @IBOutlet weak var answerTextField: UITextField!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

FormItemTableViewCell

class FormItemTableViewCell: UITableViewCell {

    @IBOutlet weak var questionLabel: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

我收到错误:

Cannot override with a stored property 'questionLabel'

Getter for 'questionLabel' with Objective-C selector 'questionLabel' conflicts with getter for 'questionLabel' from superclass 'FormItemTableViewCell' with the same Objective-C selector

Setter for 'questionLabel' with Objective-C selector 'setQuestionLabel:' conflicts with setter for 'questionLabel' from superclass 'FormItemTableViewCell' with the same Objective-C selector

1 个答案:

答案 0 :(得分:0)

您的变量questionLabel已在您的超类中定义。无需再次提及它。这是整个继承点。您的子类继承其超类的变量。

IBOutlet,IBAction,IBDesignable只是标签。在继承树中将它们添加到何处并不重要。在那里,你告诉编译器/ Xcode这是一个特殊的"功能或变量。

因此,如果您的班级有@IBAction func doStuff()功能,您可以将其覆盖为override func doStuff(),并仍然可以从IB内部连接到它。如果您想要添加willSetdidSet或替换getter / setter函数,则覆盖IBOutlet也是如此。