我试图在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及其单元均启用了用户交互。 另外,这是我的层次结构的图片
答案 0 :(得分:1)
因此UICollectionView
和UITableView
都继承自UIScrollView
,因此不应放置在另一个scrollView中。苹果暗示,这是一个坏主意,并会导致一些问题。所以,最好的答案是不是这样做的。
通常,如果需要这样做,通常最好将UICollectionView
嵌入UITableViewCell
内以创建布局。不知道您到底想做什么,很难建议最好的方法
如果您必须 这样操作,则需要查看UIGestureRecogniserDelegate并配置它们可以同时识别的某些手势。
答案 1 :(得分:0)
如果有人遇到相同的问题,请使用以下解决方法: 正如Parth所建议的那样,我没有得到点击,因为单击的是TextView。我必须为单元格内的TextView禁用用户交互,才能注册单元格上的点击。