我在同一个屏幕上有2个集合视图,我在同一个视图控制器中为两者实现了数据源和委托。但是,诸如didSelectItemAtIndexPath之类的委托方法仅被调用一个。
其他信息:
两个集合视图都具有相同的设置,但只有一个委托可以工作。你有什么线索可以设置吗?
集合视图位于具有滚动视图的视图中。这可能与某种程度有关吗?
编辑2:
具有相同问题的项目:https://github.com/iagomr/ProblemWithAutoLayout
编辑1:
这与自动布局约束有关,因为如果我将底部集合视图固定到屏幕底部而不是其他集合视图的底部,它就会开始工作。
这完全是因为我需要构建一个高大的屏幕,并将所有内容添加到1000点高的滚动视图内的视图中。
代码:
//MARK: - CollectionView Delegate
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
println("Called")
}
//MARK: - CollectionView DataSource
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if collectionView == thisCV {
return 1
} else if collectionView == thisOtherCV{
return 1
}
}
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
if collectionView == "thisCV" {
if let thisCell = collectionView.dequeueReusableCellWithReuseIdentifier("thisCell", forIndexPath: indexPath) as? thisCollectionViewCell {
thisCell.image = image
return thisCell
}
} else if collectionView == "thisOtherCV"{
if let thisOtherCell = collectionView.dequeueReusableCellWithReuseIdentifier("thisOtherCell", forIndexPath: indexPath) as? OtherCollectionViewCell {
thisOtherCell.image = image
return thisOtherCell
}
}
return UICollectionViewCell()
}
答案 0 :(得分:3)
我可以确认didSelectItem
没有被调用。如果两个集合视图之间的上下约束的常量从501更改为0,则它正在工作。
此问题很可能与您在另一个滚动视图中有两个滚动视图(集合视图)这一事实有关。总的来说,我会说,你应该修改你的用户界面。我会建议两种方法来解决它
仅使用一个集合视图,其中不同的部分用于不同的内容。此外,不要将它嵌入滚动视图 - 集合视图已经有一个滚动视图,所以你应该能够轻松滚动。您还可以为不同的部分出列不同类别的单元格,这样您就可以完成现在要执行的所有操作。
如果你想要一个起点,here是一个很好的教程,可以帮助你。
如果要在Interface Builder中设置UI,请删除两个集合视图,只需在滚动视图中添加所有UI。将UIButton
放在要点击以生成操作的位置。
您甚至可以为每个按钮分配相同的操作,然后通过为每个按钮分配自定义标记来区分触发的操作。