didSelectRowAtIndexpath未触发tableview单元格Swift iOS中的按钮

时间:2017-02-27 00:32:03

标签: ios swift uitableview

我在tableview单元格中有一个按钮(如下图所示),当我点击按钮时,

  

didSelectRowAt indexpath

没有被触发,有人可以建议我怎么做吗?

请注意: 我正在点击按钮执行一系列操作,此外我还想

  

didselectRowAt indexPath

被触发。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
 print("Table view cell has been clicked")   
}

enter image description here

3 个答案:

答案 0 :(得分:0)

将插座放在自定义单元类中的按钮上。然后在cellForItemAt中设置标签并为按钮添加选择器。此示例适用于colletionView,只需更改为适合tableView。

如果您想要每个单元格中的按钮,则必须执行此操作。向单个单元格添加静态按钮不会调用didSelectItemAt,因为您点击了一个没有引用可重用单元格indexPath的按钮。

这样我们发送button.tag他的功能,以便我们知道按钮与哪个单元格相关。

class MyClassViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {

    .... // Stuff

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    ....// Create Cell

    cell.deleteCellButton.tag = indexPath.item
    cell.deleteCellButton.addTarget(self, action: #selector(MyClassViewController.deleteCellButtonTapped(_:)), for: .touchUpInside)
    return cell
}

func deleteCellButtonTapped(_ sender: Any) {

     ... // Stuff

      print("Selector called")
}
}

答案 1 :(得分:0)

如果您要在UITableViewCell上添加按钮或手势,则不会调用didselectRowAt indexPath。您可以在剩余的UI UITableViewCell上添加按钮,而不是按钮上的清除颜色应用。用户没有显示按钮,您可以执行didselectRowAt indexPath方法任务。如果您想在按钮方法代码indexpath中给出以下内容。

 func btnChildDropDown(sender:UIButton)
    {
       let cell = sender.superview?.superview as! ChildAgeTableViewCell
       let indexPath = self.tblViewAddRooms.indexPath(for: cell)

    }

答案 2 :(得分:0)

当单元格中有多个视图时,它们可能会收到触摸事件,而不是“单元格”,因此didSelectRowAt将不会被触发。在这种情况下,请向每个视图,标签或按钮添加view.isUserInteractionEnabled = false