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

我有三种类型的细胞


OneTextFieldTableViewCell
TwoLabelTableViewCell
ThreeLabelTableViewCell


我希望这些单元格从FormTableViewCell继承,它们共享如上所述的常见UI元素,例如questionLabel

码:

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

最佳答案

您的超类中已经定义了变量questionLabel。无需再次提及。这就是继承的全部要点。您的子类继承其父类的变量。

IBOutlet,IBAction,IBDesignable只是标签。没关系在继承树中的何处添加它们。到达该位置后,您已通知编译器/ Xcode这是“特殊”函数或变量。

因此,如果您的类具有函数@IBAction func doStuff(),则可以将其重写为override func doStuff()并仍然从IB内部连接到它。如果要添加willSetdidSet或替换getter / setter函数,则与覆盖IBOutlet相同。

07-24 09:24