ios – didSelectItemAtIndexPath未在同一屏幕上调用多个集合视图

我在同一个屏幕上有2个集合视图,我在同一个视图控制器中为两者实现了数据源和委托.但是,诸如didSelectItemAtIndexPath之类的委托方法仅被调用一个.

其他信息:

>两个集合视图都有一个带图像的单元格.
>两个集合视图中的AllowSelection和UserInteractionEnabled都设置为true
>在图像上启用用户交互
>在故事板上从集合视图到视图控制器设置委托和数据源
>正确显示集合视图

两个集合视图都具有相同的设置,但只有一个委托工作.你有什么线索可以设置吗?

集合视图位于具有滚动视图的视图内.这可能与某种程度有关吗?

编辑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()
}

最佳答案 我可以确认didSelectItem没有被调用.如果两个集合视图之间的上下约束的常量从501更改为0,则它​​正在工作.

此问题很可能与另一个滚动视图中有两个滚动视图(集合视图)的事实有关.总的来说,我会说,你应该修改你的用户界面.我会建议两种方法来修复它

使用单一集合视图

仅使用一个集合视图,其中包含不同的内容.此外,不要将它嵌入滚动视图 – 集合视图已经有一个滚动视图,所以你应该能够轻松滚动.您还可以为不同的部分出列不同类别的单元格,这样您就可以完成现在要执行的所有操作.

如果你想要一个起点,here是一个很好的教程,可以帮助你.

使用滚动视图

如果要在Interface Builder中设置UI,请删除两个集合视图,只需在滚动视图中添加所有UI.将UIButton放在要单击以生成操作的位置.

您甚至可以为每个按钮分配相同的操作,然后通过为每个按钮分配自定义标记来区分触发的操作.

点赞