从未调用过UICollectionView didSelectRowAt

时间:2019-02-01 10:12:43

标签: ios swift xcode uicollectionview

我试图在UICollectionView中选择一个单元格,我已完成包括设置委托和数据源在内的所有操作,滚动视图上没有点击手势识别器。

我在滚动视图中有一个视图,当用户点击屏幕以退出键盘时,该视图被归类为UIControl来处理,但是我也删除了该视图,并且didSelectItemAt仍未触发。 这是我的代码:

@IBOutlet weak var templatesCollection: UICollectionView!

   override func viewDidLoad() {
        super.viewDidLoad()
        templatesCollection.delegate = self
        templatesCollection.dataSource = self
    }

    extension AddCardViewController : UICollectionViewDelegate,UICollectionViewDataSource
{


    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return templates.count
    }


    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = templatesCollection.dequeueReusableCell(withReuseIdentifier: "template", for: indexPath) as! TemplateCollectionViewCell
        cell.templateView.text = templates[indexPath.row]
        cell.alignTextVertically()
        cell.isUserInteractionEnabled = true
        cell.layer.shadowColor = UIColor.black.cgColor
        cell.layer.shadowOffset = CGSize(width: 0, height: 2.0)
        cell.layer.shadowRadius = 2.0
        cell.layer.shadowOpacity = 0.5
        cell.layer.masksToBounds = false

        return cell
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        print("shfgdsfgidks")
    }

        func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
            print("Deselected")
        }

    }

这也值得一提,集合视图正在显示数据,所以我知道cellForItemAt函数至少会触发,只有不调用didSelectItemAt。

collectionView及其单元均启用了用户交互。 另外,这是我的层次结构的图片

enter image description here

2 个答案:

答案 0 :(得分:1)

因此UICollectionViewUITableView都继承自UIScrollView,因此不应放置在另一个scrollView中。苹果暗示,这是一个坏主意,并会导致一些问题。所以,最好的答案是不是这样做的。

通常,如果需要这样做,通常最好将UICollectionView嵌入UITableViewCell内以创建布局。不知道您到底想做什么,很难建议最好的方法

如果您必须 这样操作,则需要查看UIGestureRecogniserDelegate并配置它们可以同时识别的某些手势。

答案 1 :(得分:0)

如果有人遇到相同的问题,请使用以下解决方法: 正如Parth所建议的那样,我没有得到点击,因为单击的是TextView。我必须为单元格内的TextView禁用用户交互,才能注册单元格上的点击。