Super.init не вызывается перед возвратом из инициализатора
Я пытаюсь дать свой UITableViewCell Class собственный инициализатор, но я не могу понять, что я делаю неправильно.
Вот мой код:
init(dataObject: [NSManagedObject]!, objectAttributeValues: [String]!,placeholder: String!, segmentedControl: UISegmentedControl?, cellHeight: CGRect, cellWidth: CGRect) {
self.dataObject = dataObject
self.Placeholder.text = placeholder
self.objectAttributeValues = objectAttributeValues
if segmentedControl != nil {
self.segmentedControl = segmentedControl!
didHaveSegmentedControl = true
}
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
Я попытался вызвать super.init(frame: CGRect (...)), но, выполнив это, я получаю еще одну ошибку: должен вызвать назначенный инициализатор суперкласса "UITableViewCell"
Что я могу сделать?
Большое вам спасибо!
Ответы
Ответ 1
Как работают инициализаторы, они добавят свои собственные свойства, константы и функции к этому экземпляру, а затем вернутся к суперклассу для объекта этого типа. Подробнее здесь.
По этой причине вы должны вызывать инициализатор суперкласса перед выходом из инициализатора. Здесь я предлагаю вам позвонить super.init()
в последнюю строку вашего инициализатора. Вы можете выбрать, какой из методов init
на UITableViewCell
наиболее подходит.
Ответ 2
override init(frame: CGRect) {
super.init(frame: frame)
}
convenience init(frame: CGRect, dataObject: [NSManagedObject]!, objectAttributeValues: [String]!,placeholder: String!, segmentedControl: UISegmentedControl?, cellHeight: CGRect, cellWidth: CGRect){
self.init(frame: frame)
self.dataObject = dataObject
self.Placeholder.text = placeholder
self.objectAttributeValues = objectAttributeValues
if segmentedControl != nil {
self.segmentedControl = segmentedControl!
didHaveSegmentedControl = true
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
Я надеюсь, что это поможет вам Переопределить метод инициализации UIView в быстром
Ответ 3
Вы должны вызвать инициализатор суперкласса.
Например, я попытался создать подкласс UIView
и у UIView
возникла та же проблема, что и у вас. Назначенный инициализатор для UIView
- super.init(frame: CGRect)
Для UITableViewCell
назначенные инициализаторы следующие.
// Designated initializer. If the cell can be reused, you must pass in a reuse
identifier. You should use the same reuse identifier for all cells of the same
form.
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:
(nullable NSString *)reuseIdentifier NS_AVAILABLE_IOS(3_0)
NS_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder
NS_DESIGNATED_INITIALIZER;
Надеюсь, это помогло.