我在collectionview的自定义单元格中有一个按钮。集合视图位于scrollview上。出于某种原因,我无法点击按钮。我已经检查过所有元素都启用了用户交互。
这是我的自定义集合视图单元格:
class MyCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var connectButton: UIButton!
var onConnectTap: (MyCollectionViewCell) -> Void)?
@IBAction func connectButton(_ sender: Any) {
onConnectTap?(self)
}
func populate(_ user: User) {
nameLabel.text = user.name
}
}
我有一个xib文件,其中按钮的Touch Up Inside事件已连接到connectButton IBAction。
在我的ViewController中:
MyCollectionView.register(UINib(nibName: "MyCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "cell")
这是我的ViewController中的集合视图函数:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = myCollectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! MyCollectionViewCell
let user = users.values[indexPath.row]
cell.populate(user)
cell.onConnectTap = { (cell) in
//do something
}
return cell
}
点击按钮后没有任何反应。我在这里错过了什么吗?滚动视图是否干扰?我需要指定addTarget吗?或其他什么?
答案 0 :(得分:10)
在搜索整个网络之后,我终于找到了这个SO答案评论中的解决方案:https://stackoverflow.com/a/44908916/406322
我需要在MyCollectionViewCell中添加它:
self.contentView.isUserInteractionEnabled = false
我认为细胞选择是劫持触摸事件。
答案 1 :(得分:2)
我遇到了同样的问题,并在花费大量时间后找到了最佳解决方案。但它是完美的解决方案。在单元格中仅添加一行用于项方法
cell.contentView.isUserInteractionEnabled = false
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = myCollectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! MyCollectionViewCell
cell.contentView.isUserInteractionEnabled = false
return cell
}
答案 2 :(得分:0)