【问题标题】:Create a customized table view cell using swift使用 swift 创建自定义的表格视图单元格
【发布时间】:2014-11-09 06:21:10
【问题描述】:

我正在按照本教程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)
    }
}

但它无法编译,我收到错误提示:

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

如果我去掉“init(coder aDecoder: NSCoder)”,我会收到错误提示 'required' 初始化器 'init(coder:)' 必须由 UITableViewCell' 的子类提供。

我已阅读此主题 Class does not implement its superclass's required members

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

但我无法编译代码。

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

谢谢。

【问题讨论】:

    标签: ios swift


    【解决方案1】:

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

    var delegate: SwipeableCellDelegate?
    

    了解初始化和可选属性类型here

    【讨论】:

    • 谢谢。我尝试将委托更改为可选。我添加了一个 setter 方法,如下所示:var delegate: SwipeableCellDelegate? setDelegate(delegate: SwipeableCellDelegate) { self.delegate = delegate } 。但我现在得到一个编译器错误,说“预期声明”
    • 你为什么要添加一个setter?这与原始问题有关吗?
    • 好的,我想我可以删除我的 setter 方法,并在调用者中直接设置我的表格单元格视图的“委托”成员。感谢您的帮助。