CollectionView中的按钮不可单击

时间:2018-04-02 16:39:55

标签: ios swift uicollectionview uicollectionviewcell swift4

我在collectionview的自定义单元格中有一个按钮。集合视图位于scrollview上。出于某种原因,我无法点击按钮。我已经检查过所有元素都启用了用户交互。

这是我的集合布局(我隐藏了一些敏感数据) enter image description here

这是我的自定义集合视图单元格:

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吗?或其他什么?

3 个答案:

答案 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)

再次检查XIB文件的结构。我花了很多时间处理这个问题(XIB中的按钮似乎没有响应),因为该结构具有第二个嵌入式单元,而不是一个嵌入式单元(在我的案例中为AboutCell)。

enter image description here