2016-04-01 28 views
0

3 farklı özel UITableViewCell ile UITableView oluşturmaya çalışıyorum. Hepsi, questionLabel adı verilen UILabel gibi bazı ortak öğeleri paylaşır. belirtildiği gibiÖzel UITableViewCell nasıl sınıflandırılır?

Ben hücreleri

  • OneTextFieldTableViewCell
  • TwoLabelTableViewCell
  • ThreeLabelTableViewCell

Ben bu hücreler questionLabel gibi ortak UI öğeleri paylaşan bir FormTableViewCell devralmak istediğiniz üç tip var yukarıdaki.

Kodu:

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 
    } 

} 

Ben hatalar alıyorum:

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 
+2

Değişken sorgunuzLabel, süper sınıfınızda zaten tanımlıdır. Tekrar bahsetmeye gerek yok. Bütün bu kalıtım noktası. Alt sınıflarınız süper sınıflarının değişkenlerini miras alır. – user965972

+0

@ user965972 cevabı ekleyebilmeniz için doğru olan – Paulw11

+0

@ user965972 gibi görünüyor. Bir cevap eklerseniz, kabul edeceğim. Temel olarak alt sınıflara ekledim çünkü IBOutlets'i süper sınıfa bağlayabileceğinizi anlayamadım :). – Alan

cevap

0

Sizin değişken questionLabel zaten üst sınıfta tanımlanmıştır. Tekrar bahsetmeye gerek yok. Bütün bu kalıtım noktası. Alt sınıflarınız süper sınıflarının değişkenlerini miras alır.

IBOutlet, IBAction, IBDesignable yalnızca etiketlerdir. Onları miras ağacına nereye eklediğiniz önemli değil. Bir kez orada, derleyici/Xcode'a bunun bir "özel" işlev veya değişken olduğunu bildirdiniz.

Sınıfınız @IBAction func doStuff() işlevine sahipse, override func doStuff() olarak geçersiz kılabilir ve yine de IB içinden bağlanabilirsiniz. willSet veya didSet eklemek veya getter/setter işlevlerini değiştirmek istediğinizde IBOutlet'i geçersiz kılmak için de aynıdır.

İlgili konular