如何使didSelectRowAt IndexPath与自定义委托一起使用

时间:2018-02-16 01:32:04

标签: swift uitableview swift3 didselectrowatindexpath

好吧,所以我有一个带有UITableView的ViewController。在继续编码之前,我读到为了从按钮获取动作或拥有自定义单元格,您可以使用标签或使用协议和放大器使用更清晰的解决方案。与会代表。显然我选择了后者。

现在当我在我的班级UITableViewCell中使用名为TableViewCellsDelegate的自定义ViewController时,我需要在下面的代码中将其替换为UITableViewDelegate,如您所见:

class ViewController: UIViewController , UITableViewDataSource, TableViewCellsDelegate{} ....

我的问题是我有这个功能现在没有被调用:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("in here")
    if indexPath.row == 0 {
        if dateCellExpanded {
            dateCellExpanded = false
        } else {
            dateCellExpanded = true
        }
        tableView.beginUpdates()
        tableView.endUpdates()
    }
}

我怀疑如果您选择使用自定义UITableViewCell,则会丢失一些委托功能。必须有一些解决方案。这是我的TableViewCellsDelegate

protocol TableViewCellsDelegate : class {
    func bookTapped(_ sender: UIButton)
    func unbookTapped(_ sender: UIButton)
}

    class TableViewCells: UITableViewCell {


        @IBOutlet var bookButtonProperties: UIButton!

        @IBOutlet var unbookButtonProperties: UIButton!

        @IBOutlet var nameField: UITextField!
        @IBOutlet var numberField: UITextField!

        weak var delegate: TableViewCellsDelegate?

        @IBAction func bookPressed(_ sender: UIButton) {
            delegate?.bookTapped(sender)
        }

       @IBAction func unbookPressed(_ sender: UIButton) {
            delegate?.unbookTapped(sender)
        }
    }

1 个答案:

答案 0 :(得分:1)

您需要使用UITableViewDelegate代替TableViewCellsDelegate来处理didSelectRowAt。

如果您有任何问题,请回复。