2016-04-01 3 views
0

Я пытаюсь создать UITableView с 3 различными пользовательскими UITableViewCell. Все они имеют некоторые общие элементы, такие как UILabel, который называется questionLabel.Как подклассировать пользовательский UITableViewCell?

У меня есть три типа клеток

  • OneTextFieldTableViewCell
  • TwoLabelTableViewCell
  • ThreeLabelTableViewCell

Я хочу, чтобы эти клетки, чтобы наследовать от FormTableViewCell, которые разделяют общие элементы пользовательского интерфейса, как в 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 
+2

Ваша переменная questionLabel уже определена в вашем суперклассе. Не нужно снова упоминать об этом. В этом весь смысл наследования. Ваши подклассы наследуют переменные своих суперклассов. – user965972

+0

@ user965972 вы должны добавить ответ, вы правы – Paulw11

+0

@ user965972 Это похоже на работу. Если вы добавите ответ, я приму его. Я в основном добавлял его в подклассы, потому что я не понимал, что вы можете подключить IBOutlets к суперклассу :). – Alan

ответ

0

Ваша переменная questionLabel уже определена в вашем суперкласса. Не нужно снова упоминать об этом. В этом весь смысл наследования. Ваши подклассы наследуют переменные своих суперклассов.

IBOutlet, IBAction, IBDesignable - это всего лишь этикетки. Неважно, где вы добавляете их в дереве наследования. После этого вы сообщили компилятору/Xcode, что это «специальная» функция или переменная.

Так что если ваш класс имеет функцию @IBAction func doStuff(), вы можете переопределить его как override func doStuff() и по-прежнему подключаться к нему изнутри IB. То же самое для переопределения IBOutlet в случае, если вы хотите добавить willSet или didSet или заменить функции приемника/сеттера.

Смежные вопросы