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

时间:2016-10-12 10:59:33

标签: ios swift uitableview protocols custom-cell

我有一个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()
        }
    }
}

在我升级之前,这个工作和委托总是有一个值,现在它总是为零而且从不调用segue。

自从我升级以使其再次运行后,我需要做些什么?

2 个答案:

答案 0 :(得分:0)

确保您在cellForRowAtIndexPath中为您的代理人分配了该代表。 另外,我建议保留weak对代表的引用。

protocol CustomCellDelegator: class {
    func callSegueFromCell()
}

CustomTableViewCell替换

var delegate:CustomCellDelegator!

weak var delegate: CustomCellDelegator?

在此之后,您无需检查您的代表是否为nil,您的应用不会崩溃。

答案 1 :(得分:0)

确保您已在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
    }
}