繁体   English   中英

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

[英]Create a customized table view cell using swift

我正在按照本教程http://www.raywenderlich.com/62435/make-swipeable-table-view-cell-actions-without-going-nuts-scroll-views创建自定义表格单元格。 但我使用的是 swift 而不是目标 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)
    }
}

但它不编译,我收到错误消息:

MyTableViewCell.swift:38:9:属性“self.delegate”未在 super.init 调用时初始化

如果我去掉“init(coder aDecoder: NSCoder)”,我会收到错误提示“必需的”初始值设定项“init(coder:)”必须由 UITableViewCell 的子类提供。

我读过这个线程Class does not implement its superclass's required members

关于在我需要的 init(coder aDecoder: NSCoder) 中做什么。

但是我无法编译代码。

如果有人可以帮助我,我将不胜感激。

谢谢你。

就是说,您需要在所有init方法的末尾定义委托,因为该类变量未设置为可选变量。 一种方法是使其成为可选(意味着它可以为nil)

var delegate: SwipeableCellDelegate?

在此处了解有关初始化和可选属性类型的信息

有 3 种方法可以解决您的问题,各有各的优点和麻烦。

  1. 如果您只需要编译代码,但永远不会使用编码器所需的初始化,则可以将默认错误保留在那里。

  2. 您也可以将委托字段设置为可选,但从现在开始,您需要处理代码中 nil 的理论上的可能性。 像这样:

    var 委托:SwipeableCellDelegate?

    guard let dlgt = delegate else {print("Delegate is not set for this cell"); 返回}

  3. 或者您可以在公共某处为委托定义默认值,并将其设置在所需的 init 中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM