如何在 Swift3 中向我的 CustomCell 添加事件

How to add event to my CustomCell in Swift3

我有一个 UITableView,它有包含两个 UISwitch 按钮的行。在我升级到 Xcode8 之前,它与我一起向视图控制器添加一个协议,就像这样

protocol CustomCellDelegator {
    func callSegueFromCell()
}

然后我将以下内容添加到我的 CustomCell swift 文件中,该文件处理我的自定义单元格的插座。

open class CustomTableViewCell: UITableViewCell {
    var delegate:CustomCellDelegator!

    @IBOutlet weak var uidLabel: UILabel!
    @IBOutlet weak var stateLabel: UILabel!
    @IBOutlet weak var operatedSwitch: UISwitch!
    @IBOutlet weak var switchRTN: UISwitch!

    override open func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    @IBAction func operatedSwitchChange() {
        if operatedSwitch.isOn {
            AppDelegate.myGlobalVars.gSwitchType = "OpsOn"
        }
        else {
            AppDelegate.myGlobalVars.gSwitchType = "OpsOff"
        }
        if(self.delegate != nil){ //Just to be safe.
            self.delegate.callSegueFromCell()
        }
    }

    @IBAction func rtnSwitchChange() {
        if switchRTN.isOn {
            AppDelegate.myGlobalVars.gSwitchType = "RtnOn"
        }
        else {
            AppDelegate.myGlobalVars.gSwitchType = "RtnOff"
        }
        if(self.delegate != nil){ //Just to be safe.
            self.delegate.callSegueFromCell()
        }
    }
}

直到我升级这个工作并且委托总是有一个值,现在它总是 nil 并且永远不会调用 segue。

自从我升级后我需要做些什么不同的事情才能让它再次工作?

确保您在 cellForRowAtIndexPath 中为单元分配您的代表。 另外,我建议保留对委托的 weak 引用。

protocol CustomCellDelegator: class {
    func callSegueFromCell()
}

在你的 CustomTableViewCell 中替换

var delegate:CustomCellDelegator!

weak var delegate: CustomCellDelegator?

在此之后你不需要检查你的代表是否 nil,你的应用程序不会崩溃。

确保您已在 ViewController:

中分配您的代表
// Make your ViewController conform to the protocol
class MyViewController: CustomCellDelegator {

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell: CustomTableViewCell = tableView.dequeueReusableCellWithIdentifier("MyCellIdentifier", forIndexPath: indexPath) as! CustomTableViewCell            
        cell.delegate = self

        return cell
    }

    func callSegueFromCell() {
      // perform your segue here
    }
}