在UICollectionView上放置一个按钮并保持滚动

时间:2015-07-27 16:40:41

标签: ios uibutton uikit uicollectionview

我有一个UICollectionView和一个UIButton(在右边缘)。但是在按钮的框架中,collectionView失去了它的滚动属性。

我不知道是否有任何方法可以维持这两种交互,内部的Button触摸和CollectionView滚动。

2 个答案:

答案 0 :(得分:1)

好吧,我想出了如何做到这一点,但我使用了UITapGestureRecognizer而不是按钮rounak建议:

    let tapGesture = UITapGestureRecognizer(target: self, action: "collectionViewDidReceiveTap:")
    tapGesture.delegate = self
    self.collectionView.addGestureRecognizer(tapGesture)

由于我希望特定的rect是“tapable”,我已经实现了UIGestureRecognizerDelegate协议,这段代码执行此操作:

public func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
    let collectionViewCurrentCell = self.collectionView.layoutAttributesForItemAtIndexPath(NSIndexPath(forItem: Int(self.currentPage), inSection: 0))
    let cellFrameInSuperview = collectionView.convertRect(collectionViewCurrentCell!.frame, toView: self)

    if gestureRecognizer.isKindOfClass(UITapGestureRecognizer) && CGRectContainsPoint(cellFrameInSuperview, touch.locationInView(self)) {

        return false
    }
    return true
}

其中cellFrameInSuperview应该是TapGesture不应该执行任何操作的区域。但与UIButton不同,滚动继续在所有Collection界限中起作用。

如果您对如何工作或为什么有效有任何疑问,请发表评论。

答案 1 :(得分:0)

使用具有点击手势识别器的视图而不是按钮,让点击手势识别器与滚动视图的平移手势同时工作。