来自tableViewCell的swift @IBAction

时间:2017-10-19 10:50:23

标签: ios swift4 ibaction iboutlet

我需要通过单击tableViewCell来触发一个函数, 到目前为止我使用了@IBAction,但该选项仅适用于按钮类型(我还没有找到另一种方式..) 这就是我现在的方式:

@IBAction func springPrs(_ sender: Any) {
    //doing stuff.. 
}

但现在我有@IBOutlet

@IBOutlet weak var nextTrackCell: nextTableViewCell!

我想点击它来触发一个功能。有什么帮助吗?

3 个答案:

答案 0 :(得分:1)

这是一种错误的方法,您应该从名为UITableViewDelegate的{​​{1}}实施委托方法:

didSelectRowAt

答案 1 :(得分:0)

您不应该直接向表格视图单元格添加操作,因为它违反了MVC设计模式,并且UITableViewDelegate中已经内置了一个方便的回调,以使其变得非常简单。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if indexPath.row == 0 {
        // do something when the top row tapped
    } else {
        // do something when any other row is tapped
    }
}

答案 2 :(得分:0)

您还可以在单​​元格内部声明一个闭包,这是我在必须将某些操作传递给视图控制器时倾向于使用的闭包。

var onButtonPressed: (() -> ())?

@IBAction func buttonPressed(_ sender: Any) {
    onButtonPressed?()
}

cellForRowAt中像这样使用它:

cell.onButtonPressed = { [unowned self] in
    // Do what you need to, no need to capture self however, if you won't access it.
}