使用swift创建定制表格视图单元格

7ajki6be  于 2023-01-04  发布在  Swift
关注(0)|答案(2)|浏览(143)

我正在使用http://www.raywenderlich.com/62435/make-swipeable-table-view-cell-actions-without-going-nuts-scroll-views创建一个自定义的表格单元格,但是我使用的是swift而不是objective c。
这是我在swift中的表格单元格视图。

protocol SwipeableCellDelegate {
    func buttonOneActionForItemText(itemText: NSString)
    func buttonTwoActionForItemText(itemText: NSString)
}

class MyTableViewCell: UITableViewCell {
    @IBOutlet weak var button1: UIButton!
    @IBOutlet weak var button2: UIButton!
    @IBOutlet weak var mytextLabel: UILabel!

    @IBOutlet weak var testLabel: UILabel!

    var delegate: SwipeableCellDelegate

    init(delegate: SwipeableCellDelegate) {
        self.delegate = delegate
        super.init()
    }

    required init(coder aDecoder: NSCoder) {
       // fatalError("init(coder:) has not been implemented")
        super.init(coder : aDecoder)
    }
}

但它没有编译,我得到错误说:
我的表格视图单元格. swift:38:9:属性"self.delegate"在super.init调用时未初始化
如果去掉"init(coder aDecoder:NSCoder)",我收到错误消息,指出"必需的"初始化程序" init(coder:)"必须由UITableViewCell"的子类提供。
我看过这个帖子
关于在我所需的init中要做什么(coder aDecoder:NSCoder)的编码器。
但我无法编译代码。
如果有人能帮助我,我将不胜感激。
谢谢你。

92dk7w1h

92dk7w1h1#

这意味着你需要在所有init方法的末尾定义delegate,因为这个类变量没有被设置为可选的,一种方法是将它设置为可选的(意味着它可以是nil)

var delegate: SwipeableCellDelegate?

在此处阅读初始化和可选属性类型

7hiiyaii

7hiiyaii2#

有三种方法来解决你的问题,不同的美丽和麻烦的数量。
1.如果您只需要编译代码,但从不使用coder中所需的init,则可以将默认错误保留在那里。
1.你也可以让delegate字段成为可选的,但是从现在开始你需要处理代码中nil的理论可能性,就像这样:
var代表:可移动单元格代理?。
guard let dlgt = delegate else {print("此单元格未设置委托");返回}
1.或者,您可以在某个公共位置为委托定义一个默认值,并在所需的init中设置它。

相关问题