在 UICollectionView 上放置一个按钮并保持滚动
Posted
技术标签:
【中文标题】在 UICollectionView 上放置一个按钮并保持滚动【英文标题】:Place a button over UICollectionView and maintain the scroll 【发布时间】:2015-07-27 16:40:41 【问题描述】:我有一个 UICollectionView 和一个 UIButton 在它上面(在右边缘)。但是在按钮的框架中,collectionView 失去了它的滚动属性。
我不知道是否有任何方法可以保持两种交互,即内部的 Button 触摸和 CollectionView 的滚动。
【问题讨论】:
【参考方案1】:好吧,我想出了如何做到这一点,但我使用 UITapGestureRecognizer 而不是按钮,因为 rounak 建议:
let tapGesture = UITapGestureRecognizer(target: self, action: "collectionViewDidReceiveTap:")
tapGesture.delegate = self
self.collectionView.addGestureRecognizer(tapGesture)
因为我希望一个特定的矩形是“可点击的”,所以我已经实现了 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 范围内起作用。
如果您对它的工作原理或原因有任何疑问,请发表评论。
【讨论】:
在所有解决方案中,这是最适合我的一个【参考方案2】:使用带有点击手势识别器的视图代替按钮,并让点击手势识别器与滚动视图的平移手势同时工作。
【讨论】:
嗯,好的,我用过它,它可以工作,但现在我丢失了我的 collectionView 委托的任何“didSelectItemAtIndexPath”调用以上是关于在 UICollectionView 上放置一个按钮并保持滚动的主要内容,如果未能解决你的问题,请参考以下文章
如何禁用 UICollectionView 部分之间的单元格拖动?