为什么UICollectionView didSelect方法不起作用?

时间:2016-08-19 10:01:26

标签: ios swift uicollectionview uicollectionviewcell

我以编程方式创建了UICollectionView,在这种情况下,我的didSelectItemAtIndexPath方法根本不会调用。

let collectionView = UICollectionView(frame: CGRect(x: 0, y: 0, width: CGRectGetWidth(self.view.frame), height: 360), collectionViewLayout: layout)
collectionView.delegate = self
collectionView.dataSource = self
collectionView.userInteractionEnabled = true

那么,有什么问题?为什么当我点击细胞时,我没有得到我的回应?

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    print("Selected Cell: \(indexPath.row)")
}

4 个答案:

答案 0 :(得分:4)

我知道这可能要晚了,但是出于功能目的,collectionview [didSelectItem]无法响应触摸可能是由于您还加入了“ addGestureRecognizer”而导致的,因此请检查您是否在collectionview上设置了手势识别器像这样“ collectionView?.addGestureRecognizer(tapGestRecognizer)”

答案 1 :(得分:1)

在Project Navigator中选择ViewController.swift。使用以下命令更新类声明:

class ViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource 


//After class declaration create a new variable:

 var collectionView: UICollectionView!



  override func viewDidLoad() {
   super.viewDidLoad()
     // Do any additional setup after loading the view, typically from a nib.
   let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
   layout.sectionInset = UIEdgeInsets(top: 20, left: 10, bottom: 10, right: 10)
   layout.itemSize = CGSize(width: 90, height: 120)

   collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
   collectionView.dataSource = self
   collectionView.delegate = self
   collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
   collectionView.backgroundColor = UIColor.whiteColor()
   self.view.addSubview(collectionView)
}



func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    print("Selected Cell: \(indexPath.row)")
}

答案 2 :(得分:1)

我刚遇到这种情况。

您是否在集合视图单元格中放置了按钮或交互式视图? 通过它来处理您的触摸,然后不会调用didSelect。

通过“界面”构建器关闭“启用用户交互”属性,或通过编程将其设置为false。

enter image description here

答案 3 :(得分:0)

检入UiCollectionviewCell子类isUserInteractionEnabled属性,或以编程方式将其设置为true

self.contentView.isUserInteractionEnabled = true