UITableViewCellクラスにカスタムイニシライザーを与えようとしましたが、何が間違っているのかわかりません。
ここに私のコードがあります:
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」
私に何ができる?本当にありがとうございます!
初期化子が機能する方法は、独自のプロパティ、定数、および関数をそのインスタンスに追加し、その型のオブジェクトのスーパークラスをコールバックすることです。詳細 こちら 。
このため、イニシャライザーを終了する前に、スーパークラスのイニシャライザーを呼び出す必要があります。ここでは、初期化子の最後の行でsuper.init()
を呼び出すことをお勧めします。 init
のどのUITableViewCell
メソッドが最も適切かを選択できます。
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")
}
これがあなたの助けになることを願っています SwiftのUIViewのinitメソッドをオーバーライドします
初期化子を指定したスーパークラスを呼び出す必要があります。
たとえば、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;
これが役に立てば幸いです。