Swift-Tableview单元格内的Clicked按钮不会在该单元格的函数处调用did select行

时间:2018-12-10 04:26:15

标签: swift uitableview uibutton tableview didselectrowatindexpath

我以编程方式创建了一个表格视图,每个表格视图单元都有与之关联的按钮。

如果单击该行,我可以算出与该行上的按钮关联的标签,然后在应用其他功能时可以编辑标题。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    TmpActionConnectorTag = indexPath.row + 700 //Tag associated to button
}

单击按钮时,我有这段代码可以更改该行上的另一个按钮

let tag = TmpActionConnectorTag
    let tmpButton = self.view.viewWithTag(tag) as? UIButton

问题是,如果我直接单击表格视图单元格中的按钮,则选择行未获得调用,并且未给出标签值。为此,我必须先在单元格中单击,然后单击按钮才能知道与该行关联的标签。

单击按钮时是否有办法锻炼索引行,所以我不必单击实际的单元格?

enter image description here

上面是单元格的正常外观,下面显示了如何选择该单元格才能获得索引值。

enter image description here

2 个答案:

答案 0 :(得分:1)

按钮操作不会调用didSelectRowAt。您应该使用委托方法。如果不知道委托的意思是refer this

答案 1 :(得分:0)

单元格的按钮不会触发func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath),相反,您需要向按钮中添加target,这通常是在cellForItemAt内完成的。

将目标添加到单元格中的按钮

   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = MyTableViewCell()
        cell.button.tag = indexPath.row
        cell.button.addTarget(self, action: #selector(didTapCellButton(sender:)), for: .touchUpInside)
    }

处理按钮操作

@objc func didTapCellButton(sender: UIButton) {
    guard viewModels.indices.contains(sender.tag) else { return } // check element exist in tableview datasource

    //Configure selected button or update model
}