collectionView didSelectItemAt indexPath不叫swift

时间:2016-12-29 11:33:34

标签: ios swift uicollectionview swift3

我有一个自定义视图,其中包含如下所示的集合视图集。

func setupCollectionView() {
    let layout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: scaled(height: 15), left: scaled(width: 35), bottom: scaled(height: 15), right: scaled(width: 35))
    layout.itemSize = CGSize(width: scaled(width: 30), height: scaled(width: 30))
    layout.minimumLineSpacing = 15
    layout.minimumInteritemSpacing = 30
    collectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: layout)
    collectionView.showsVerticalScrollIndicator = false
    collectionView.showsHorizontalScrollIndicator = false
    collectionView.register(THTexasHoldemEmojiCell.self, forCellWithReuseIdentifier: THTexasHoldemEmojiCell.className)
}

和委派函数

extension THTexasHoldemEmojisView {

    func setupDelegates() {
        collectionView.dataSource = self
        collectionView.delegate = self
    }

}

extension THTexasHoldemEmojisView: UICollectionViewDelegate {

    func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath) {
        print("did highlight item")
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        print("did select item")

    }

}

奇怪的是didHighlightItem函数可以调用,但didSelectItem不会。我错过了什么吗?谢谢你的帮助。

我的视图连接是UIViewController(THController)持有UIView(THEmojisView),THEmojisView持有集合视图。 在THController中,我有很多观点和动作,但没有涵盖THEmojisView。 THController的touchesBegan(_ touches:Set,with event:UIEvent?)是否可能会影响集合视图的委托函数?

6 个答案:

答案 0 :(得分:1)

随便打电话

collectionView.dataSource = self
collectionView.delegate = self

在您的viewDidLoad

答案 1 :(得分:0)

THTexasHoldemEmojiCell 可能存在问题。也许在集合视图单元格中有一个 UIControl 实例可以处理所有触摸。简单的解决方案是将此 UIControl isUserInteractionEnabled 属性设置为false。

答案 2 :(得分:0)

我遇到了类似的问题。我有我的自定义UIView并添加了collectionView。我还设置了数据源和委托,但我无法滚动collectionView,并且didSelectItemAt函数没有被调用。关键是我设置的collectionView框架错误

答案 3 :(得分:0)

我为集合视图使用了自定义布局,突然,didselect项停止触发该事件。

尝试将GestureRecognizer添加到您的UICollectionView

let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))

self.collectionView.addGestureRecognizer(tap)

self.collectionView.isUserInteractionEnabled = true


@objc func handleTap(_ sender: UITapGestureRecognizer) {
   if let indexPath = self.collectionView?.indexPathForItem(at: sender.location(in: self.collectionView)) {
//Do your stuff here

}
}

答案 4 :(得分:0)

您是否应该为父视图或视图控制器的视图使用Gesturerecognizer-将其设置为cancelsTouchesInView = false

答案 5 :(得分:0)

也许您的单元格中有一个subviewisUserInteractionEnabled的{​​{1}}。

尝试将Cell子视图的true属性更改为isUserInteractionEnabled

这对我有用。