我在tableview单元格中有一个按钮(如下图所示),当我点击按钮时,
didSelectRowAt indexpath
没有被触发,有人可以建议我怎么做吗?
请注意: 我正在点击按钮执行一系列操作,此外我还想
didselectRowAt indexPath
被触发。
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("Table view cell has been clicked")
}
答案 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
。