17

我尝试给我的 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'的指定初始化程序

我能做些什么?十分感谢!

4

3 回答 3

16

初始化器的工作方式是,它们会将自己的属性、常量和函数添加到该实例,然后回调超类以获取其类型的对象。更多信息在这里

出于这个原因,您必须在退出初始化程序之前调用超类的初始化程序。在这里,我建议您调用super.init()初始化程序的最后一行。您可以选择最合适的init方法。UITableViewCell

于 2015-06-16T23:33:06.347 回答
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 的 init 方法

于 2017-09-18T07:00:35.347 回答
0

你必须调用超类指定的初始化器。

例如,我试图创建一个子类,UIView并且遇到了与您完全相同的问题。指定初始化器为 isUIView指定初始化器如下。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;

希望这有帮助。

于 2019-04-17T07:33:04.247 回答